프로시져 원문
=================================================================================
CREATE OR REPLACE PROCEDURE "DCAUSER"."PROC_LONG_PROCESS" (long_1 OUT VARCHAR2,long_2 OUT VARCHAR2,long_3 OUT VARCHAR2,long_4 OUT VARCHAR2) is
l_var_text varchar2(2000);
l_counter number(5) := 0;
i number(5) := 1;
j number(5) := 1;
l_rec_length number(9) := 0;
l_size number(3) := 200; //DBMS_OUTPUT.PUT_LINE 출력스트링 제한. 더늘려도 됨
cursor c1 is
select MD_LONG from TEST_LONG;
begin
for c1_rec in c1 loop
l_rec_length := length(c1_rec.MD_LONG);
dbms_output.put_line('Record length is: '||l_rec_length);
while l_rec_length > 0 loop
l_counter := l_counter + 1;
l_var_text := substr(c1_rec.MD_LONG,i,l_size);
//DBMS_OUTPUT.PUT_LINE('Line '||l_counter||': '||l_var_text);
if j=1 then long_1:=l_var_text;
end if;
if j=2 then long_2:=l_var_text;
end if;
if j=3 then long_3:=l_var_text;
end if;
if j=4 then long_4:=l_var_text;
end if;
i := i + l_size;
l_rec_length := l_rec_length - l_size;
j := j+ 1;
end loop;
i := 1;
end loop;
end;
호출부분
================================================================================
declare
m1 varchar2(200); //DBMS_OUTPUT.PUT_LINE 출력스트링 제한. 더늘려도 됨
m2 varchar2(200);
m3 varchar2(200);
m4 varchar2(200);
begin
PROC_LONG_PROCESS(m1,m2,m3,m4);
DBMS_OUTPUT.PUT_LINE('Line '||1||': '||m1);
DBMS_OUTPUT.PUT_LINE('Line '||2||': '||m2);
DBMS_OUTPUT.PUT_LINE('Line '||3||': '||m3);
DBMS_OUTPUT.PUT_LINE('Line '||4||': '||m4);
end;
결과값
=================================================================================
Line 1: MMMMMMMMMMMMMMMMMMMMMMMMMM.....
Line 2: MMMMMMMMMMMMMMMMMMMMMMMMMM.....
Line 3: MMMMMMMMMMMMMMMMMMMMMMMMMM.....
Line 4: MMMMMMMMMMMMMMMMMMMMMMMMMM.....
LONG 필드의 각각 VARCHAR 변수에 200 씩 잘라져서 나옴