다음 저장 프로시 저는 Oracle 데이터베이스에서 모든 BLOB 값을 가져 와서 OraFolder라는 폴더에 저장합니다.이 저장 프로 시저에 매개 변수가 실제로 필요합니까?
잘 컴파일되지만 질문이 2 개 있습니다.
1, pname과 display_name의 두 매개 변수가 있습니다. 나는 우리가 필요로하는 코드를 봤기 때문에 내가 그곳에 무엇이 있는지 몰랐다는 것을 인정해야한다.
제 질문은 폴더에 BLOB 값을 모두 추출하려고하는데 2 개의 params가 필요합니까?
2 대답이 '예'인 경우, 어떻게 사용해야합니까?
마지막으로 Entry_Id가 있습니다. 선언하지 않은 오류가 계속 발생했습니다. 나는 그것을 제거해야만했다. 그것은 무엇을 위해 사용됩니까?
Sorr, 나는 오라클 사람이 아니다. 나의 랩에 떨어 뜨린 문제를 해결하기 위해 노력하고있다. 여기
사전
에서덕분에 전체 저장된 프로 시저입니다. vname
이 덩어리가 기록되는 파일의 이름처럼
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;
나는이 가정하고 당신이 컴파일있어 최대 해킹입니다. PL은 ADA에 기반한 다른 언어와 동일한 규칙을 가진 튜링 언어입니다. 저에게 원래 SP를 보여 주면 내가 할 수있는 것을 보게 될 것입니다. – FlyingGuy
네, 감사합니다. 내가 요청한 원본과 함께 게시 된 코드를 대체했습니다. – Kenny