次のストアド・プロシージャは、OracleデータベースからすべてのBLOB値を取得し、OraFolderという名前のフォルダに保存するためのものです。本当にこのストアドプロシージャのパラメータが必要ですか?
コンパイルは問題ありませんが、2つの質問があります。
1には、pnameとdisplay_nameの2つのパラメータがあります。私は私の必要性に合うようなコードをグーグルで探そうとしたので、私は彼らが何のためにいるのか分からないことを認めなければなりません。
私の質問は本当に2つのパラメータが必要です。すべてのBLOB値をフォルダに抽出しようとしていますか?
2答えが「はい」の場合、私はそれらを使用する必要があります。どのように使用しますか?
最後に、Entry_Idがありますが、私はそれが宣言されていないというエラーを受けています。私はそれを取り除かなければならなかった。それは何のために使われますか?
ソーラー、私はオラクルの男ではなく、私の周りに落とされた問題を解決するためにただのことを考えようとしています。ここでは、事前
で
おかげで、完全なストアドプロシージャです。
create or replace PROCEDURE blob2file(pfname VARCHAR2, display_name in varchar2) IS
vblob BLOB;
vstart NUMBER := 1;
bytelen NUMBER := 32000;
len NUMBER;
my_vr RAW(32000);
x NUMBER;
v_name varchar2(100);
lv_str_len NUMBER;
l_output utl_file.file_type;
BEGIN
-- define output directory
lv_str_len := length(pfname);
--v_name := display_name||upper(substr(pfname,lv_str_len-3,lv_str_len));
v_name := display_name;
l_output := utl_file.fopen('MY_FOLDER', v_name, 'w', 32760);
-- get length of blob
SELECT dbms_lob.getlength(blob_content)
INTO len
FROM portal.WWDOC_DOCUMENT$
WHERE FILENAME = pfname;
-- dbms_output.put_line('Length: '||len);
-- save blob length
x := len;
-- select blob into variable
SELECT blob_content
INTO vblob
FROM portal.WWDOC_DOCUMENT$
WHERE FILENAME = pfname;
-- if small enough for a single write
IF len < 32760 THEN
-- dbms_output.put_line('Single write ');
utl_file.put_raw(l_output,vblob);
utl_file.fflush(l_output);
ELSE -- write in pieces
-- dbms_output.put_line('multi write '||vstart);
vstart := 1;
WHILE vstart < len
LOOP
dbms_lob.read(vblob,bytelen,vstart,my_vr);
utl_file.put_raw(l_output,my_vr);
utl_file.fflush(l_output);
-- set the start position for the next cut
vstart := vstart + bytelen;
-- set the end position if less than 32000 bytes
x := x - bytelen;
IF x < 32000 THEN
bytelen := x;
END IF;
END LOOP;
END IF;
dbms_output.put_line('End');
utl_file.fclose(l_output);
EXCEPTION
when others then dbms_output.put_line('ERROR:'||entry_id);
END blob2file;
私は、これはあなたがコンパイルするようになったアップハッキング1と仮定しています。 PLは、ADAに基づいた他の言語と同じ規則を持つチューリング完全言語です。元のSPを私に見せてください。私は何ができるかを見ていきます。 – FlyingGuy
よろしくお願いいたします。あなたが要求したオリジナルのコードを置き換えました。 – Kenny