2012-03-28 18 views
0

私はOracle 10gでこのPL/SQLプログラムを試しています。テキストファイル(データ)を 'C:¥Oracle'から読み込み、PLSQLスクリプトを使用してOracle表にロードします。しかし、私は次のエラーを取得しています:PLSQLプログラムを使用してテキストファイルからOracle 10gのテーブルに挿入する方法は?

ORA-29283: invalid file operation 
ORA-06512: at "SYS.UTL_FILE", line 488 
ORA-29283: invalid file operation 

は、ここに私のスクリプトです:

Create or Replace PROCEDURE Rfile is 
    line VARCHAR2(100); 
    namesfile UTL_FILE.FILE_TYPE; 
BEGIN 
    -- Syntax : FOPEN (directory alias, filename, open mode) 

    namesfile := UTL_FILE.FOPEN('FILESDIR1','NAMES2.TXT','R'); -- open in read mode 

    LOOP 
     UTL_FILE.GET_LINE(namesfile,line,100); 
     dbms_output.put_line(line); 

     insert into names2 values(line);     -- insert into NAMES table 
    END LOOP; 
EXCEPTION 
    WHEN OTHERS THEN 
    dbms_output.put_line('Others exceptions....'); 
END; 
+0

あなたはディレクトリを作成しましたか? – cagcowboy

+0

エラーを引き起こす行はどれですか? – cagcowboy

+0

'FILESDIR1'とは何ですか? – Sathya

答えて

0

あなたはこのライン上の小文字の 'r' を必要とする場合があります...

namesfile := UTL_FILE.FOPEN('FILESDIR1','NAMES2.TXT','r'); -- open in read mode 
                ^
+0

大文字のRに変更しましたが...同じエラー... – Balakumaran

+0

小文字の「r」。元の質問では大文字にしました。 – cagcowboy

+0

私はそれを 'r'に変更しました...同じエラー – Balakumaran

1

別の方法を試すことができます。
external table(ファイルにマップされたテーブル)を作成してファイルを読み込み、次に外部
からあなたのテーブルへ (または多分あなたも、別のテーブルにそれを挿入する必要はありませんか?)

0

あなたのループは、ファイルの終わりなので、論理的にいくつかの点で、ファイルをチェックしません。読み取り操作は例外を発生させるはずですが、それはおそらくあなたが持っているものです。

また、ディレクトリ(FILESDIR1)が正しいOSディレクトリを指しており、そのディレクトリへのアクセスが許可されていて、ファイルがそのOSディレクトリ(ローカルファイルシステムではない)にあることを確認する必要があります。

Btw。場合によっては、SQL Loaderを使用してテーブル内のデータを一括して読み込むほうが効率的です。ファイルが大きい場合は、SQLローダーがデータファイル内のデータを直接ロードするように指示し、SQLレイヤー(INSERTステートメントによって生成されたもの)をすべて一緒にバイパスすることができます。

関連する問題