※ ChatGPTを利用し、要約された質問です(原文:oracle関数の質問)
Oracle関数でC:¥tempディレクトリのエクセルファイルをバイナリデータとしてテーブルにINSERTする方法
このQ&Aのポイント
Oracle関数を使用して、C:¥tempディレクトリにあるエクセルファイルのバイナリデータをテーブルにINSERTする方法についての質問です。
DBMS_LOB.FILEOPENでディレクトリもしくはファイルが存在しないためエラーが発生しています。ディレクトリとファイル名は正しく設定されており、ディレクトリオブジェクトの値も確認しましたが、他に原因がわかりません。
また、DBMS_LOB.FILEOPEN関数とBFILENAME関数で正しいパラメータを指定する方法について教えてください。
oracleで関数を作成してその関数で"C:¥temp"ディレクトリにあるエクセルファイルのバイナリデータをテーブルにINSERTしようとしています。
"DBMS_LOB.FILEOPEN"するさいにディレクトリもしくは、ファイルが存在しないためエラーがおきてしまい困っています。
ディレクトリもファイル名も何回もチェックしてあっていました。
またディレクトリオブジェクトの値もチェックしました。
それ以外の根本的な原因がわかりません。
ご教授の方お願いします。
また、"DBMS_LOB.FILEOPEN"関数と"BFILENAME"関数でどういったパラメータを指定すればいいかおしえてください。
よろしくお願いします。
ソースは、以下のようになります。
FUNCTION upload_attach_file_test(
iv_ list_id IN VARCHAR2, --ファイルID
iv_patch_file IN VARCHAR2 --ファイル名
) RETURN NUMBER
IS
dst_loc BLOB;
src_loc BFILE;
v_amt NUMBER := dbms_lob.lobmaxsize;
src_offset NUMBER := 1;
dst_offset NUMBER := 1;
BEGIN
--ディレクトリオブジェクト取得
SELECT directory_path
into lv_test
FROM all_directories
WHERE directory_name = 'test';
--BLOB読み込み
src_loc := BFILENAME( lv_test, 'test.tmp');
DBMS_LOB.FILEOPEN(src_loc, dbms_lob.file_readonly);
INSERT INTO test (
test_id,
test_blob
) VALUES (
iv_list_id,
empty_blob()
)RETURNING test_blob INTO dst_loc;
DBMS_LOB.LOADBLOBFROMFILE(dst_loc, src_loc, v_amt, dst_offset, src_offset);
-- ファイルクローズ
DBMS_LOB.FILECLOSEALL();
RETURN lv_test;
END;