1

いくつかの結果をWindowsフォルダ「c:\temp」に出力してみてください。プロシージャをコンパイルして問題なく実行しますが、出力ファイル「c:\ temp\foo.log」が見つかりません。これが私のコードです:

    CREATE OR REPLACE  DIRECTORY tmp AS 'c:\temp\';


    CREATE OR REPLACE PROCEDURE write_log
    AS
       CURSOR cur
       IS
          SELECT firstname,
                 lastname
          FROM   MEMBER
          WHERE  memberid BETWEEN 2 AND 5; -- only test 3 rows.

       fname MEMBER.firstname%TYPE;
       lname MEMBER.lastname%TYPE;
       outputrecord VARCHAR2 ( 255 );
       outputfile UTL_FILE.file_type;
    BEGIN
       OPEN cur;

       FETCH cur
       INTO  fname,
             lname;

       outputfile := UTL_FILE.fopen ( UPPER ( 'tmp' ),
                                      'foo.log',
                                      'W',
                                      32767
                                    );

       WHILE cur%FOUND
       LOOP
          outputrecord := fname || ',' || lname;
          UTL_FILE.put ( outputfile, outputrecord );
          UTL_FILE.new_line ( outputfile );

          FETCH cur
          INTO  fname,
                lname;
       END LOOP;

       CLOSE cur;

       UTL_FILE.fclose ( outputfile );
    END write_log;
    /

    BEGIN
       write_log;
    END;
    /

私はここで何か間違ったことをしましたか?

ありがとう!

4

1 に答える 1

2

UTL_FILEクライアント マシンではなく、データベース サーバー上のファイルを操作します。データベース サーバー上のファイルの読み取りと書き込みのみを行うことができます。このコードが正常に実行されると仮定すると、 という名前のデータベース サーバーにファイルが作成されますc:\temp\foo.log

于 2012-10-17T22:47:22.237 に答える