--開始時間拼接' 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表示資料庫定...