700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > oracle存储过程动态sql单引号拼接和变量拼接

oracle存储过程动态sql单引号拼接和变量拼接

时间:2021-02-13 21:25:02

相关推荐

oracle存储过程动态sql单引号拼接和变量拼接

1.单引号的作用

在oracle中单引号主要有两个作用: 一是字符串都用单引号引用,例如'abc';二是转义符,转义符在使用时一般会出现多个连在一起的单引号,相对难理解一些。下面举例说明。

实例1:select '''' from dual;

实例1结果:

实例2:select 'oracle''' from dual;

实例2结果:

实例1解析:第一个和第四个单引号是成对出现的,作用是把字符串引起来;第二个单引号表示转义符号,第三个单引号表示被转义的符号,就是此时第三个单引号在转义符号的作用下就代表单引号“ ' ”本身。

实例2解析:'oracle'''可以拆分成4部分,①:' 、②:oracle、③:'' 、④:',其中①④成对出现,表示把中间的字符串内容引起来,②表示字符串:oracle,③利用转义符将单引号本身转义,表示单引号字符串:';所以最终①④中间的字符串内容是oracle' 。

2.在动态sql中字符串和变量拼接

2.1拼接要点:

(1)最外边上的两个单引号是引用字符串的固定写法;

(2)中间两个紧紧相连的单引号表示单引号本身(例如' ' : 第一个单引号表是转义字符,用来转义后面的字符;第二个单引号是被转义的字符,表示单引号字符本身,这里不起到把字符串引起来的作用)

2.2存过代码

create or replace procedure P_TEST(v_djxh in number) is

v_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)';

dbms_output.put_line(ls_sql); --打印变量ls_sql的值

①: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)

②: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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。