ORACLE数据库存储过程,转义符问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORACLE数据库存储过程,转义符问题相关的知识,希望对你有一定的参考价值。

我要的存储过程的SQL语句是:
delete from new_report_data t,new_user_id u
where t.user_id_index=u.user_id_index
and u.user_id_name in
('46cb80f2d77ce8f66cfb989e64bc0b61','445cefe016ee6a0f55856e0cac86aff0',
'103af1d15234daba68adb990cd42dc89','1dee142a8f7c268a47ec85c420712961',
'c7140a97b0d12c5125d7d8709174cd58','b9231c759be355ec90efc2e487f4435a',
'badc5300a4283f9b707487591c939987','206096931dcf537976fbe141faef55f4')

下面我创建了一个存储过程,建立的时候没有语法错误,但执行的时候出现了错误,是转义符搞错了吗?怎么改?
create or replace procedure delete_new_report_data
as
sql_de1 varchar2(200);
begin
sql_de1:='delete from new_report_data t,new_user_id u
where t.user_id_index=u.user_id_index
and u.user_id_name in
(''46cb80f2d77ce8f66cfb989e64bc0b61'',''445cefe016ee6a0f55856e0cac86aff0'',
''103af1d15234daba68adb990cd42dc89'',''1dee142a8f7c268a47ec85c420712961'',
''c7140a97b0d12c5125d7d8709174cd58'',''b9231c759be355ec90efc2e487f4435a'',
''badc5300a4283f9b707487591c939987'',''206096931dcf537976fbe141faef55f4'')
';
EXECUTE IMMEDIATE sql_de1;
COMMIT;
end;

sql_de1 varchar2(200)  中 200之 太小了,超出delete 语句的长度,将其改为 sql_de1 varchar2(2000)

参考技术A 是你第三行变量的长度定义的不够长吧,改为500试一下
sql_de1 varchar2(500);

oracle转义符

1.q

select  q‘‘a%‘‘ from dual; ‘为分隔符
--注意当使用单引号为分隔符时,被转义的字符串中与转义单引号相连的不能时单引号
--例:select q‘‘xxx‘‘ from dual;这其中x不能为单引号
select  q‘!a‘!‘ from dual;!为分隔符 
开始分隔符为( [ { < 时,结束分隔符是其另一半,即) ] } >





以上是关于ORACLE数据库存储过程,转义符问题的主要内容,如果未能解决你的问题,请参考以下文章

oracle中的转义符 - 在oracle中插入单引号与'&'

oracle转义符

Oracle单引号转义符

java插入中文到oracle变问号

oracle 如何插入带有引号''和连接符的字符串

Oracle 语句如何转义