oracle 儲存過程 呼叫動態sql

2021-09-07 19:37:06 字數 1162 閱讀 9483

--開始時間拼接' 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;

編譯成功,但是儲存過程呼叫失敗。

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

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

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;

結果展示:

入參

出參

--結束時間拼接' 00:00:00'

select decode(length(v_end), 10, v_end || ' 00:00:00', v_end) into v_end from dual;

oracle動態呼叫 動態呼叫儲存過程

關鍵字 execute immediate sqlname using in 1 in 2 out c sql create or replace procedure p test a in varchar2,b in varchar2,c out varchar2 2 is 3 begin 4 c...

delphi動態呼叫oracle儲存過程

function fun logincheck var puserinfo tremployee var errormessage string flag string integer varadostoredproctemp tadostoredproc begin adostoredprocte...

oracle 儲存過程 呼叫動態sql

開始時間拼接 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 編譯成功,但是儲存過程呼叫失敗。在oracl資料庫中,ddl表示資料庫定...