- - PR -
PL/SQL文にて
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2005-03-01 17:56
PL/SQL文にて、コーディングをしています。ある週次処理のデータ
をCSV形式で保存して置くものです。意図した通りにプログラムは 動作するのですが、ファイルに何のデータも入ってこない場合の分 岐処理を加えて、データが入ってこなかった場合にはファイルは作 成しないというロジックを検討しています。 そこでUTL_FILE.FREMOVE のプロシージャを使って1KBのファイル は削除するという処理を考えてみましたが、うまく行かないようです。 どなたかうまいやり方をご存知無いでしょうか? 最終的にはOSのシェルで削除するしか無いかなとも思っています。 --略-- --ファイル名設定 file_name := UPPER(rec_kaisya_1.kaisya_cd) || '_KATAMEI_ERROR_' || to_char(sysdate, 'YYMMDD') || '.csv'; --ファイルオープン(新規書き込みモード) File_Handle := UTL_FILE.FOPEN(file_dir, file_name, 'w'); --日付の書き込み UTL_FILE.PUTF(File_Handle, 'Created: %s\n', SYSDATE); --ファイルへの書き込み(改行のみ) UTL_FILE.NEW_LINE(FILE_HANDLE); --見出しの書き込み v_line_header := '会社コード, 会社名, 販製品名, 数量'; UTL_FILE.PUT_LINE(File_Handle, v_line_header); --会社毎のデータ取得 FOR rec_kaisya IN cur_kaisya(v_nenki,rec_kaisya_1.kaisya_cd ) LOOP --一行づつ書き込み UTL_FILE.PUTF(File_Handle,' ''%s, ''%s, ''%s, %s\n', rec_kaisya.kaisya_cd ,rec_kaisya.kaisya_jname ,rec_kaisya.hanseihin_mei ,rec_kaisya.su); END LOOP; UTL_FILE.FCLOSE(File_Handle); END LOOP; --略-- /* *ファイルの削除 ファイルの削除のプロシージャはUTL_FILE.FREMOVE を利用します。 このプロシージャは実行するユーザーに十分な権限があるという前提で ファイルの削除をすることが可能。 このプロシージャはバイナリデータに対しても使用可能。 <プロシージャ定義> UTL_FILE.FREMOVE (削除対象のあるディレクトリ名IN VARCHAR2, 移動対象のファイルIN VARCHAR2) <使用例> C:\DATAFILE\TEST.TXT を削除する SQL> host dir /b TEST.TXT SQL> exec utl_file.fremove('DIR_C','TEST.TXT'); PL/SQL プロシージャが正常に完了しました。 SQL> host dir /b SQL> */ |
|
投稿日時: 2005-03-02 13:16
仰る意味がよく解りませんでした。
何を尋ねているのでしょうか? 私は4通り受取れました。 ・対象データ0件時に出力ファイルを作成しないロジックが解らない。 ・ファイルが思った様に削除されない。 ・デバッグの仕方が解らない ・何が解らないか解らない _________________ 人生変わっちゃうかもよ?OFF会参加者募集中今考えるな、参加してから考えろ。 |
|
投稿日時: 2005-03-02 14:03
はにまるさん、質問文がわかりにくくてすみませんでした。ご指摘の最初の部分の"対象データ0件時に出力ファイルを作成しないロジックが解らない。" というところがそもそも私が知りたかったところです。でも、もし、ファイルを作成したあとでも、空ファイルを削除できるようにすれば、結果が同じようになるのではないかと思い、UTL_FILE.FREMOVE のプロシージャを使えるかと思いましたが、これも思ったように行かず、皆さんのお知恵をお借りしたかった次第です。
|
|
投稿日時: 2005-03-02 14:46
使用しているDBサーバーはOracleだと思いますが、どのバージョンでしょうか?
環境を書いてください。 とりあえず、私の環境はOracle 9i R9.0.1(Windows 2000 Server)には UTL_FILE.FREMOVEというプロシージャは見つかりませんでした。 SELECT PROCEDURE_NAME FROM ALL_PROCEDURES WHERE OBJECT_NAME = 'UTL_FILE'; 「対象データ0件時に出力ファイルを作成しないロジック」は、 単純に対象データのCountを先に取得し、0件であればファイル出力処理を まるごとスキップすればよいのではないでしょうか? |
|
投稿日時: 2005-03-02 14:55
kanaiさん、ご回答感謝致します。バージョンはOracle8iです。早速ご提案を検証したいと思います。
|
1