在oracle中單引號主要有兩個作用: 一是字串都用單引號引用,例如'abc';二是轉義符,轉義符在使用時一般會出現多個連在一起的單引號,相對難理解一些。下面舉例說明。
例項1:select '''' from dual;例項1結果:
例項2:select 'oracle''' from dual;例項1解析:第乙個和第四個單引號是成對出現的,作用是把字串引起來;第二個單引號表示轉義符號,第三個單引號表示被轉義的符號,就是此時第三個單引號在轉義符號的作用下就代表單引號「 ' 」本身。例項2結果:
例項2解析:'oracle'''可以拆分成4部分,①:' 、②:oracle、③:'' 、④:',其中①④成對出現,表示把中間的字串內容引起來,②表示字串:oracle,③利用轉義符將單引號本身轉義,表示單引號字串:';所以最終①④中間的字串內容是 oracle' 。
2.1拼接要點:
(1)最外邊上的兩個單引號是引用字串的固定寫法;
(2)中間兩個緊緊相連的單引號表示單引號本身(例如' ' : 第乙個單引號表是轉義字元,用來轉義後面的字元;第二個單引號是被轉義的字元,表示單引號字元本身,這裡不起到把字串引起來的作用)
2.2存過**
create or replace procedure p_test(v_djxh in number) isv_str varchar2(500);
v_var1 varchar2(100);
v_var2 varchar2(100);
begin
--傳入引數 v_djxh => 12345 ,變數v_var1的值是:aed0b
select trim(zlbscjuuid) into v_var1 from tmp_dm0_fbcw_bslqc where djxh = v_djxh;
v_str := 'update j1_tgq.sb_cwbb_cjtjj_zcfzb set uuid=''qwer'' where zlbscjuuid = '''||v_var1||''' ';
execute immediate v_str;
commit;
dbms_output.put_line('v_str:'||v_str);
end;
列印結果:2.3解析'update j1_tgq.sb_cwbb_cjtjj_zcfzb set uuid=''qwer'' where zlbscjuuid = '' ' ||v_var1|| ' '' ' 可以分成五部分,如下圖.
第①部分: 'update j1_tgq.sb_cwbb_cjtjj_zcfzb set uuid=''qwer'' where zlbscjuuid = '' ' 解析後為 update j1_tgq.sb_cwbb_cjtjj_zcfzb set uuid='qwer' where zlbscjuuid = '
第②部分: || 代表拼接符
第③部分: v_var1 代表變數 解析後為 aed0b
第④部分: || 代表拼接符
第⑤部分: ' '' ' 解析後為 單引號本身'
所以五個部分拼接起來解析後的結果是: update j1_tgq.sb_cwbb_cjtjj_zcfzb set uuid='qwer' where zlbscjuuid = 'aed0b'
下面是儲存過程中的一段**:
ls_sql := 'select listagg(''''''''||gb_dm||'''''' as col_''||gb_dm,'','') within group (order by gb_dm) from (select distinct gb_dm from v_dm2_gjs_sds_fjm_gb_hh45_10)';①:ls_sql的列印結果: select listagg(''''||gb_dm||''' as col_'||gb_dm,',') within group (order by gb_dm) from (select distinct gb_dm from v_dm2_gjs_sds_fjm_gb_hh45_10)dbms_output.put_line(ls_sql); --列印變數ls_sql的值
②:plsql視窗執行①的結果 : '270' as col_270, '275' as col_275, '276' as col_276, '288' as col_288, '328' as col_328, 'qt' as col_qt
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表示資料庫定...
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表示資料庫定...
oracle 動態儲存過程
1.定時 begin sys.dbms scheduler.create job job name job pro his delete cp job type stored procedure job action pro his delete cp start date sysdate,repe...