oracle 預存程序 調用動態sql

來源:互聯網
上載者:User

標籤:head   exp   get   sed   http   html   body   推薦   into   

 oracle 預存程序 調用動態sqlCreationTime--2018年8月16日11點25分Author:Marydon1.錯誤實現方式
--開始時間拼接‘ 00:00:00‘  V_SQL := ‘select decode(length(‘ || V_END || ‘),10,‘ || ‘concat(‘ || V_END || ‘, 00:00:00),‘ || V_END || ‘) from dual‘;  EXECUTE IMMEDIATE V_SQL;

  編譯成功,但是預存程序調用失敗。

2.原因分析

  在oracl資料庫中,ddl表示資料庫定義語言,即我們平常使用的sql語句,聲明的sql語句可以直接使用拼接字串進行拼接;

  dml表示資料操縱語言,聲明的sql語句不能再用管道符||來動態拼接變數。 

3.正確實現方式

  execute immediate屬於dml,dml使用sql的規則如下:

  聲明sql語句

  字串拼接變數時,變數要使用預留位置來代替,格式為 ":" + "名字",名字隨意

  調用sql語句

  使用"using"來傳遞變數,代替預留位置,格式為 "using var1,var2,..."

V_SQL := ‘select decode(length(:v1),10,:v2,:v3) from dual‘;EXECUTE IMMEDIATE V_SQL INTO V_START USING V_START,V_START || ‘ 00:00:00‘,V_START;  

  結果展示:

 

4.測試

  入參

  出參

5.最簡單的方式
--結束時間拼接‘ 00:00:00‘SELECT DECODE(LENGTH(V_END), 10, V_END || ‘ 00:00:00‘, V_END) INTO V_END FROM DUAL;

 

 相關推薦:
  • exception PLS-00403: expression ‘V_END‘ cannot be used as an INTO-target of a SELECT/FETCH statement

 

 

oracle 預存程序 調用動態sql

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.