--開始時間拼接' 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;
--業務執行游標後面可以直接拼接sql字串,並將其當做sql來執行(這是在儲存過程呼叫的)open out_cursor for 'select to_char(to_date(' || starttime || ', ''yyyy-mm-dd'') + rownum - 1,
''yyyy-mm-dd'') as regdate
from dual
connect by rownum <=
trunc(to_date(' || endtime || ', ''yyyy-mm-dd'') -
to_date(' || starttime || ', ''yyyy-mm-dd'')) + 1';
結果如下
另外對於單引號的轉義,兩個緊挨的單引號'',就表示乙個轉義過的單引號'
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表示資料庫定...