Oracle: 使用execute immediate,當列名需要動態綁定時.

來源:互聯網
上載者:User

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來傳遞。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.