Вопрос про dbms_lob

puma777
Дата: 17.09.2015 13:48:32
Здравствуйте! Помогите,повалуйста,мне нужно,чтобы один внутренний lob (pc_text1) присоединилась в конец другого внутреннего lob (pc_text2).Моя программа выдает только lob (pc_text1),но нужно ,чтобы в конце добавлялось еще и lob (pc_text2). Есть такая процедура DBMS_LOB.APPEND (pc_text1,pc_text2),но я не знаю куда ставить и как вызвать ее?Может кто поможет? Спасибо!


create or replace package body PACKAGE is
pc_text1 clob;
-- pc_text2 clob;
procedure rep(av_source varchar2, av_target varchar2) is
begin
pc_text1 := replace(pc_text1, av_source, av_target);
end;
procedure load(av_rep varchar2) is
begin
select data dat into pc_text1 from rep_blob where rep = av_rep;
exception
when no_data_found then
dbms_lob. trim(pc_text1, 0);
end;
procedure cur_body(an_Cont P_Type.T_Contract, av_rep varchar2) is
lc_temp clob;
begin
for r in ((select
(select cst.customer from u_customer cst where cst.customer=pl.customer)cust, to_char(s.ENTRYDATE, 'dd.mm.yyyy') entdate
from TABLE1 s, TABLE2 l,TABLE pl
where l.CONTRACT = s.CONTRACT
and pl.contract=l.CONTRACT
and l.CONTRACT =an_cont
and s.refnum =
(select max(refnum)
from TABLE4
where s.contract = contract
and s.ACCOUNT = account))
) loop
load(av_rep);
rep('&cust&', r.cust);
rep('&entdate&', r. entdate);


end loop;

p_lob.setclob(pc_text1, 2);
end;

end PACKAGE;
ArtNick
Дата: 17.09.2015 13:55:32
puma777
Дата: 17.09.2015 14:03:38
ArtNick,

а куда ставить?Я вместо p_lob.setclob(pc_text1, 2) ставил DBMS_LOB.APPEND (pc_text1,pc_text2),но ничего не вышло,то есть я получил только один lob (pc_text1):
........
end loop;
--p_lob.setclob(pc_text1, 2);
DBMS_LOB.APPEND (pc_text1,pc_text2)

end;
+
Дата: 17.09.2015 14:14:12
puma777,

а где в процедуре присваивание значения pc_text2?
puma777
Дата: 17.09.2015 14:36:52
+,
Так у меня и после присваивания ничего не выходит

create or replace package body PACKAGE is
pc_text1 clob;
pc_text2 clob;
procedure rep(av_source varchar2, av_target varchar2) is
begin
pc_text1 := replace(pc_text1, av_source, av_target);
pc_text2 := replace(pc_text2, av_source, av_target);
end;
procedure load(av_rep1 varchar2) is
begin
select data dat into pc_text1 from rep_blob where rep = av_rep1;
exception
when no_data_found then
dbms_lob. trim(pc_text1, 0);
end;
procedure load(av_rep2 varchar2) is
begin
select data dat into pc_text2 from rep_blob where rep = av_rep2;
exception
when no_data_found then
dbms_lob. trim(pc_text2, 0);
end;
procedure cur_body(an_Cont P_Type.T_Contract, av_rep1 varchar2) is
lc_temp clob;
begin
for r in ((select
(select cst.customer from u_customer cst where cst.customer=pl.customer)cust, to_char(s.ENTRYDATE, 'dd.mm.yyyy') entdate
from TABLE1 s, TABLE2 l,TABLE pl
where l.CONTRACT = s.CONTRACT
and pl.contract=l.CONTRACT
and l.CONTRACT =an_cont
and s.refnum =
(select max(refnum)
from TABLE4
where s.contract = contract
and s.ACCOUNT = account))
) loop
load(av_rep,);
rep('&cust&', r.cust);
rep('&entdate&', r. entdate);
end loop;

p_lob.setclob(pc_text1, 2);
end;
PACKAGE1.cur_body(l.contract, av_rep2);
end PACKAGE;
+
Дата: 17.09.2015 14:45:17
puma777,

ты троллишь что ли?
JDS
Дата: 17.09.2015 14:54:11
+
SQL> declare
  2    c1 clob := 'clob1';
  3    c2 clob := 'clob2';
  4  begin
  5    dbms_output.enable;
  6    dbms_lob.append(c1, c2);
  7    dbms_output.put_line(c1);
  8  end;
  9  /
 
clob1clob2
 
PL/SQL procedure successfully completed
 
SQL>