I write this post is just to make a summary of a point met this week.
寫得不好的話,請園子里的朋友們多提意見。
這個星期的工作遇到需要給Pakage加一個function,這個 function需要動態(tài)組織Sql ,
以實(shí)現(xiàn)不同的 logic.
In oracle, we know that:
EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并馬上執(zhí)行動態(tài)的SQL語句或非運(yùn)行時創(chuàng)建的PL/SQL塊.動態(tài)創(chuàng)建和執(zhí)行SQL語句性能超前.
使用起來也非常容易,for example:
declare
? l_dept??? pls_integer := 20;
? l_nam???? varchar2(20);
? l_loc???? varchar2(20);
?begin
? execute immediate 'select dname, loc from dept where deptno = :1'
??? into l_nam, l_loc
??? using l_dept ;
?end;
這就是一個典型的檢索并傳值的例子。
我的例子稍微有一點(diǎn)不同,the column name needed to be binded dynamically.
??????? PKG_***.GET_****(' service_credit_percent ', 1, 2, inValExtractControlId, inEndDate)
其中, service_credit_percent 就是我想動態(tài)bind的列名,
我發(fā)現(xiàn)其它參數(shù)都可以,就是列名不能作為參數(shù)通過 bind 來傳遞。
向同事請教后,采取以下措施:
將列名,在拼接sql 時,直接拼接進(jìn) string:
?sql_select := 'SELECT sum(' ||? v_service_credit_pct || ')'?|| ;
v_service_credit_pct ? 是 function用來接受列名的參數(shù).
其它參數(shù)則可以使用bind來傳遞。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
