4

私はOracle SQL開発者を勉強しています。

私がやっていることは、フォルダーからテキストファイルを1行ずつ読み取ることです。次に、SQL テーブルにデータを挿入します。

PROCEDURE をコンパイルすることはできますが、データをファイルに挿入していないようです。

Create or Replace PROCEDURE Rfile is
f UTL_FILE.FILE_TYPE;
s VARCHAR2(200); 
BEGIN
f := UTL_FILE.FOPEN('C:\Projects\','testdatabinary.txt','R');
  IF UTL_FILE.IS_OPEN(f) THEN
    LOOP
      BEGIN
        UTL_FILE.GET_LINE(f,s);
        IF s IS NULL THEN
          EXIT;
        END IF;
      INSERT INTO DATAINSERT
      (COLUMN1, COLUMN2)
      VALUES
      (s, 'testdatabinary');
      END;
  END LOOP;
  COMMIT;
  END IF;
 END;

そして、2つのvarchar(200)タイプの列を持つテーブルDATAINSERTがあります

PROCEDUREがテーブルにデータを挿入していない理由がよくわかりません

エラーメッセージを確認しました

Error starting at line 1 in command:
EXEC Rfile
ORA-29280: invalid directory path
ORA-06512: at "SYS.UTL_FILE", line 41
ORA-06512: at "SYS.UTL_FILE", line 478
ORA-06512: at "SYSTEM.RFILE", line 5
4

6 に答える 6

8

このようにファイルを開くコマンドにパスを直接入力することはできません

f := UTL_FILE.FOPEN('C:\Projects\','testdatabinary.txt','R');

パスを直接入力する代わりに、以下の SQL クエリを使用してディレクトリを作成する必要があります

DIRECTORY USER_DIR AS 'C:\PROJECTS\' を作成または置換します。

次に、ファイル オープン コマンドにディレクトリ名を入力します。このようになります

f := UTL_FILE.FOPEN('USER_DIR ','testdatabinary.txt','R');
于 2015-05-28T06:28:59.520 に答える
-2

で最初のログイン

ユーザー名:sysdba としての sys

パスワードは、ユーザー「システム」に使用されているものと同じでなければなりません

今入る

SQL> UTL_FILE の実行を PUBLIC に許可します。

プロシージャを作成する任意のユーザーでログインします

于 2015-10-08T07:47:44.970 に答える