ファイルをBLOBとしてOracleテーブルに読み込もうとしています。ファイルは*.gzデータです。私はネットを見回していくつかの例を見つけました、そしてこれは私が思いついたものです:
PROCEDUREupload_supp_dataを作成または置換します は src_file BFILE; dst_file BLOB; lgh_file BINARY_INTEGER; data_dir varchar2(20):='/ tmp /'; file_name varchar2(50):= '200912020200.rep-ids-top50-sip.txt.gz'; 始める src_file:= BFILENAME(data_dir、file_name); -ロックするNULLレコードを挿入します INSERT INTO alarms_supplemental (alarm_id、resource_id、supplementaldata )。 値(13794740、1、EMPTY_BLOB() )。 補足データを返す INTO dst_file; -ロックレコード 補足データを選択 INTO dst_file FROM alarms_supplemental WHERE alarm_id = 13794740 更新用; -ファイルを開きます DBMS_LOB.fileopen(src_file、DBMS_LOB.file_readonly); -長さを決定します lgh_file:= DBMS_LOB.getlength(src_file); -ファイルを読む DBMS_LOB.loadfromfile(dst_file、src_file、lgh_file); --blobフィールドを更新します ALARMS_SUPPLEMENTALを更新 SET Supplementaldata = dst_file WHERE ALARM_ID = 13794740; -ファイルを閉じる DBMS_LOB.fileclose(src_file); END upload_supp_data;
これを実行すると、次のエラーが発生します。
ORA-22285:FILEOPEN操作用のディレクトリまたはファイルが存在しません ORA-06512:「SYS.DBMS_LOB」の635行目 ORA-06512:「AIP_DBA.UPLOAD_SUPP_DATA」の29行目 ORA-06512:2行目 プロセスが終了しました。
パスをさまざまな方法で試しました。つまり、「/ tmp /」、「tmp」、「/tmp」です。ファイル名が正しいので、何が悪いのか途方に暮れています。これは実際に私がこれまでに作成した最初のストアドプロシージャであるため、これは非常に単純なことかもしれません。誰かがこれを手伝ってくれることを願っています。ちなみに、私はOracleSQLDeveloperを使用しています。