I write this post is just to make a summary of a point met this week.
寫得不好的話,請園子里的朋友們多提意見。
這個星期的工作遇到需要給Pakage加一個function,這個 function需要動態組織Sql ,
以實現不同的 logic.
In oracle, we know that:
EXECUTE IMMEDIATE代替了以前Oracle8i中DBMS_SQL package包.它解析并馬上執行動態的SQL語句或非運行時創建的PL/SQL塊.動態創建和執行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;
這就是一個典型的檢索并傳值的例子。
我的例子稍微有一點不同,the column name needed to be binded dynamically.
??????? PKG_***.GET_****(' service_credit_percent ', 1, 2, inValExtractControlId, inEndDate)
其中, service_credit_percent 就是我想動態bind的列名,
我發現其它參數都可以,就是列名不能作為參數通過 bind 來傳遞。
向同事請教后,采取以下措施:
將列名,在拼接sql 時,直接拼接進 string:
?sql_select := 'SELECT sum(' ||? v_service_credit_pct || ')'?|| ;
v_service_credit_pct ? 是 function用來接受列名的參數.
其它參數則可以使用bind來傳遞。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

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