2

Oracle 10 でストアド プロシージャを使用してテキスト ファイルを作成する際に助けが必要です。私はこれが初めてなので、最初からガイドしてください。

コードを見つけて、ストアド プロシージャとして作成しました。私はそれを実行し、有効です。しかし、私はそれを実行しました、私はのエラーを得ました"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;

私はこれにまったく慣れていないので、何が欠けているのかわかりません。あと、指定したディレクトリに自動でファイルが作成されていますか?

あなたが私を助けてくれることを願っています。ありがとう、神のご加護を!

4

2 に答える 2

5

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

あなたのコード(エラーになります):

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 パッケージの仕様を開きます。プロシージャ コールで何が行われるかについての十分なコメントが記載された優れたドキュメントが提供されます)

あなたが得るエラーは何ですか?使用しているコードと取得したものを貼り付けることはできますか? 完全な実行の詳細?

于 2012-03-05T10:53:24.930 に答える