आपने अपने 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};';
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;
/
जैसा कि आप देख सकते हैं कि मैंने function f_subst बनाया है इसमें 3 तर्क होते हैं:
str varchar2- प्रतिस्थापन के लिए इनपुट स्ट्रिंगtemplate varchar2- प्रतिस्थापन के लिए स्ट्रिंग मास्क, आपके उदाहरण में यह${param%d}. हैsubst ora_name_list_t- यह एक संग्रहTYPE ora_name_list_t IS TABLE OF VARCHAR2(2*(ORA_MAX_NAME_LEN+2)+1)की तालिका के रूप में परिभाषित , ताकि आप प्रतिस्थापन के लिए किसी भी संख्या में स्ट्रिंग निर्दिष्ट कर सकें। इस उदाहरण में, मैंनेstr1. डाला है करने के लिएstr5।
तो यह फ़ंक्शन इनपुट संग्रह तत्वों को पुनरावृत्त करता है और इस संग्रह के मूल्य के साथ इनपुट टेम्पलेट मास्क से मेल खाने वाले किसी भी सबस्ट्रिंग को बदल देता है।
परिणाम:
p1:str1;p2:str2;p3:str3;p4:str4;p5:str5;
और अंत में अपने मूल 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;
/