標籤: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