Je hebt je rec . niet beschreven type, dus ik zal een voorbeeld laten zien hoe je het onafhankelijker kunt maken:
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;
/
zoals je kunt zien heb ik function f_subst gemaakt daar zijn 3 argumenten voor nodig:
str varchar2- invoertekenreeks voor vervangingtemplate varchar2- tekenreeksmasker voor vervanging, in uw voorbeeld is dit${param%d}subst ora_name_list_t- dat is een collectie gedefinieerd alsTYPE ora_name_list_t IS TABLE OF VARCHAR2(2*(ORA_MAX_NAME_LEN+2)+1), zodat u een willekeurig aantal tekenreeksen kunt opgeven voor vervanging. In dit voorbeeld heb ikstr1naarstr5.
Dus deze functie herhaalt invoerverzamelingselementen en vervangt alle subtekenreeksen die overeenkomen met een invoersjabloonmasker met de waarde uit deze verzameling.
Resultaten:
p1:str1;p2:str2;p3:str3;p4:str4;p5:str5;
En tot slot met je originele rec :
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;
/