Oracle字符串如何连接单引号

限于喜欢 提交于 2020-01-10 01:15:46

Oracle字符串如何连接单引号

今天写了个存储过程,需要在字符串变量前后加单引号。貌似简单的事情折腾了我一下午,好在天无绝人之路。终于被我弄明白甲骨文的变态规则。

Oracle 字符串连接单引号:

1.       首尾单引号为字符串识别标识,不做转译用

2.       首尾单引号里面如果出现的单引号,并且有多个,则相连两个单引号转译为一个字符串单引号

3.       单引号一定成对出现,否者这个字符串出错,因为字符串不知道哪个单引号负责结束

select to_char('aaa')from dual;
select '' || to_char('aaa') || ''from dual;
select '''' || to_char('aaa') || '''' from dual;
select '''''' || to_char('aaa') || '''''' from dual;
select '''''''' || to_char('aaa') || '''''''' from dual;
select ' '' ' ||' ' || ' '' ' || to_char('aaa') || ' '' '' ' from dual;

 

拼接示例:

create or replace procedure proc_createnewcardversion(srcunitcode varchar2, srccardbillcodes varchar2)
as
dstcardrecid raw(16) := null;
cursor c_srccard is (SELECT recid, billcode
                    FROM (SELECT a.recid, a.orgunit, a.year, a.period, a.billcode, a.islocked, a.isvalid, a.lockrecid, a.lockdefid, a.validtime, a.invalidtime,
                                 ROW_NUMBER() OVER (PARTITION BY a.orgunit, a.billcode ORDER BY a.invalidtime desc) AS RN
                            FROM am_card a
                           where a.orgunit = (select recid from md_org where stdcode = srcunitcode)
                             and a.billcode in ('''' || replace(srccardbillcodes, ',' , ''',''') || ''''))
                   WHERE RN = 1);
begin
  DBMS_OUTPUT.PUT_LINE('执行:');
  for srccard in c_srccard loop --获取这些卡片编号下的最后一个版本数据
      dstcardrecid := sys_guid();
      DBMS_OUTPUT.PUT_LINE(srccard.recid || srccard.billcode || dstcardrecid ||';');
  end loop;
end;

call proc_createnewcardversion('010101','4701-0001,4701-0002');

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!