v_upl_blob BLOB;
vstart Number:=1;
bytelen Number:=32000;
len Number;
my_vr Raw(32000);
x Number;
l_output Utl_file.file_type;
erout varchar2(1000);
BEGIN
SELECT blob_content
INTO v_upl_blob
FROM wwv_flow_files
WHERE name =:P25_FB;
-:p25_fbは、ページ内のファイル参照項目です
LEN:=Dbms_lob.getlength(V_UPL_BLOB);
l_output:=Utl_File.fopen('MY_FILES'、:P25_FB、'wb'、32760);
vstart:=1;
bytelen:=32000;
IF len <32760
Then
Utl_File.put_raw(l_output、V_UPL_BLOB);
Utl_File.fflush(l_output);
その他-分割して書き込む
vstart:=1;
WHILE vstart
LOOP
Dbms_lob.Read(V_UPL_BLOB、bytelen、vstart、my_vr);
Utl_File.put_raw(l_output、my_vr);
Utl_File.fflush (l_output);
-次のカットの開始位置を設定します
vstart:=vstart + bytelen;
-32000バイト未満の場合は終了位置を設定します
x: =x --bytelen;
IF x <32000
Then
bytelen:=x;
END IF;
END LOOP;
END IF;
Utl_File.fclose(l_output);
DELETE FROM wwv_flow_files
WHERE name =:P25_FB;
COMMIT;
---カスタムデータベースプロシージャを呼び出してインポートします...
yourcustomprocedure(:P25_FB);
EXCEPTION When Others
Then
IF Utl_File.is_Open(l_output)Then
Utl_File.fclose(L_OUTPUT);
END IF;
raise;
END;