Anda belum mendeskripsikan rec . Anda ketik, jadi saya akan menunjukkan contoh bagaimana membuatnya lebih mandiri:
declare
type t_rec is record(
param1 varchar2(30),
param2 varchar2(30),
param3 varchar2(30),
param4 varchar2(30),
param5 varchar2(30)
);
rec t_rec;
v_tx_cuerpo varchar2(4000);
function f_subst(str varchar2, template varchar2, subst ora_name_list_t) return varchar2
as
res varchar2(32767):=str;
begin
for i in 1..subst.count loop
res:=replace(res, replace(template,'%d',i), subst(i));
end loop;
return res;
end;
begin
v_tx_cuerpo:='p1:${param1};p2:${param2};p3:${param3};p4:${param4};p5:${param5};';
v_tx_cuerpo:=f_subst(
v_tx_cuerpo,
'${param%d}',
ora_name_list_t('str1','str2','str3','str4','str5')
);
dbms_output.put_line(v_tx_cuerpo);
end;
/
seperti yang Anda lihat, saya telah membuat function f_subst yang membutuhkan 3 argumen:
str varchar2- masukan string untuk penggantiantemplate varchar2- string mask untuk penggantian, dalam contoh Anda adalah${param%d}subst ora_name_list_t- itu adalah koleksi didefinisikan sebagaiTYPE ora_name_list_t IS TABLE OF VARCHAR2(2*(ORA_MAX_NAME_LEN+2)+1), sehingga Anda dapat menentukan sejumlah string untuk penggantian. Dalam contoh ini, saya telah menempatkanstr1kestr5.
Jadi fungsi ini mengulangi elemen koleksi input dan mengganti substring apa pun yang cocok dengan topeng template input dengan nilai dari koleksi ini.
Hasil:
p1:str1;p2:str2;p3:str3;p4:str4;p5:str5;
Dan akhirnya menggunakan rec asli Anda :
declare
type t_rec is record(
param1 varchar2(30),
param2 varchar2(30),
param3 varchar2(30),
param4 varchar2(30),
param5 varchar2(30)
);
rec t_rec;
v_tx_cuerpo varchar2(4000);
function f_subst(str varchar2, template varchar2, subst ora_name_list_t) return varchar2
as
res varchar2(32767):=str;
begin
for i in 1..subst.count loop
res:=replace(res, replace(template,'%d',i), subst(i));
end loop;
return res;
end;
begin
v_tx_cuerpo:='p1:${param1};p2:${param2};p3:${param3};p4:${param4};p5:${param5};';
rec.param1:='str1';
rec.param2:='str2';
rec.param3:='str3';
rec.param4:='str4';
rec.param5:='str5';
v_tx_cuerpo:=f_subst(
v_tx_cuerpo,
'${param%d}',
ora_name_list_t(
rec.param1,
rec.param2,
rec.param3,
rec.param4,
rec.param5
)
);
dbms_output.put_line(v_tx_cuerpo);
end;
/