आपने अपने 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;
/