2012-03-05 59 views
1

Oracle 10のストアド・プロシージャを使用してテキスト・ファイルを作成する際の助けが必要です。Oracle - ストアド・プロシージャを使用してテキスト・ファイルを作成する

コードが見つかり、ストアドプロシージャとして作成しました。私はそれを実行し、それは正当です。しかし、私はそれを実行した、私はエラーを受けた"INVALID FILE NAME... AT SYS.UTL_FILE..."

私は最初にディレクトリに書き込みを許可するディレクトリを作成しました。

CREATE OR REPLACE PROCEDURE refcursorkim IS 
    l_file  utl_file.file_type; 
    l_file_name VARCHAR2(60); 
BEGIN 
l_file := utl_file.fopen('UTL_DIR', l_file_name, 'w');   
    SELECT 'KY' || TO_CHAR(SYSDATE, 'yyyymmdd') || '1.txt' INTO l_file_name FROM dual; 
    utl_file.putf(l_file,l_file_name); 
    utl_file.fclose(l_file); 
END refcursorkim; 

私はこのことに全く慣れていないので、私は行方不明を知りません。もう一つのことは、ファイルが指定されたディレクトリに自動的に作成されているかどうかです。

あなたが私を助けてくれることを願っています。ありがとう、神は祝福します!

答えて

3

適切なファイル名でファイルを開く必要があります。

CREATE OR REPLACE PROCEDURE refcursorkim 
IS 
    l_file  UTL_FILE.file_type; 
    l_file_name VARCHAR2 (60); 
BEGIN 
    l_file := UTL_FILE.fopen ('UTL_DIR', l_file_name, 'w'); 

    SELECT 'KY' || TO_CHAR (SYSDATE, 'yyyymmdd') || '1.txt' 
    INTO l_file_name 
    FROM DUAL; 

    UTL_FILE.putf (l_file, l_file_name); 
    UTL_FILE.fclose (l_file); 
END refcursorkim; 

は(補正)する必要があります:

あなたのコード(アウトエラーになります)

ここ
CREATE OR REPLACE PROCEDURE refcursorkim 
IS 
    l_file  UTL_FILE.file_type; 
    l_file_name VARCHAR2 (60); 
BEGIN 

    SELECT 'KY' || TO_CHAR (SYSDATE, 'yyyymmdd') || '1.txt' 
    INTO l_file_name 
    FROM DUAL; 

    l_file := UTL_FILE.fopen ('UTL_DIR', l_file_name, 'w'); 

    UTL_FILE.putf (l_file, l_file_name); 
    UTL_FILE.fclose (l_file); 
END refcursorkim; 

より:http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/u_file.htm#i1004619

編集1:

  1. ファイルが存在しない場合は、新しいファイルが作成されます。存在すれば、新しいファイルに置き換えられます。ファイルを保存する必要がある場合は、'A'追加モードで開きます。
  2. UTL_FILE内にディレクトリの内容を参照するオプションはありません。ただし、Oracle 11gには他にもオプションがあります。どのOracleのバージョンを使用していますか? (私はまた、あなたの迅速なOracleの標準ライブラリ関数を学ぶのに役立ちます内側の秘密を与える。UTL_FILEパッケージの仕様を開きます。彼らは、プロシージャ・コールで行われているものには十分なコメントが素敵なドキュメントを提供)

何あなたが得るエラーですか?使用しているコードと入手したコードを貼り付けることはできますか?フルラン詳細?

+0

このコードは、ファイルが存在しない場合は自動的に作成されることを意味しますか?どのようにOracleサーバーのファイルのリストにアクセスするには?私はSELECT * FROM ALL_DIRECTORIESだけを知っています。これはディレクトリのリストを取得するだけですが、私は各ディレクトリのファイルも知りたいのですが(別のスレッドでこれを尋ねるはずです...)ファイルが作成されているかどうかを確認したいだけです。私はまだ同じエラーがあります。無効なファイル操作... sys.utl_file ...ありがとう! – user1249603

+0

答えを更新しました。チェック。 – Guru

+0

オラクル10gを使用しています。これは私のコードです: 'CREATE OR REPLACE PROCEDURE refcursorkim IS l_file utl_file.file_type; l_file_name VARCHAR2(60); BEGIN \t \t SELECT 'KY' || TO_CHAR(SYSDATE、 'yyyymmdd')|| '1.txt' \t \t INTO l_file_name FROM dual; l_file:= utl_file.fopen( 'UTL_DIR'、l_file_name、 'w'); utl_file.putf(l_file、l_file_name); utl_file.fclose(l_file); END refcursorkim; / エラーは、 "ORA-29283:ファイル操作が無効です。| ORA-06512:SYS。ORA-29283:ファイル操作が無効です| ORA-06512:SCHEMA_NAME.REFCURSORKIM、9行目| OR-06512:2行目 – user1249603

関連する問題