在Oracle PL/SQL中,如何转义字符串中的单引号?我试过这种方法,它不起作用。
declare
stmt varchar2(2000);
begin
for i in 1021 .. 6020
loop
stmt := 'insert into MY_TBL (Col) values(\'ER0002\')';
dbms_output.put_line(stmt);
execute immediate stmt;
commit;
end loop;
exception
when others then
rollback;
dbms_output.put_line(sqlerrm);
end;
/
发布于 2012-07-04 00:38:44
您可以使用文字引号:
stmt := q'[insert into MY_TBL (Col) values('ER0002')]';
文字can be found here的文档。
或者,您可以使用两个引号来表示单引号:
stmt := 'insert into MY_TBL (Col) values(''ER0002'')';
使用Q语法的文字引用机制更灵活,可读性更好,IMO。
发布于 2018-02-09 13:39:13
除了上面DCookie的答案之外,您还可以使用chr(39)作为单引号。
当我必须基于大量现有数据创建许多insert/update语句时,我发现这特别有用。
下面是一个非常快速的例子:
假设我们有一个非常简单的表Customers,它有两列: FirstName和LastName。我们需要将数据移动到Customers2中,因此需要生成一组INSERT语句。
Select 'INSERT INTO Customers2 (FirstName, LastName) ' ||
'VALUES (' || chr(39) || FirstName || chr(39) ',' ||
chr(39) || LastName || chr(39) || ');' From Customers;
我发现这在将数据从一个环境移动到另一个环境或快速重建环境时非常有用。
发布于 2020-04-01 04:01:29
EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(''ER0002'')'
;为我工作。用两对单引号结束varchar
/string
就行了。其他选项可以使用using
关键字EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002'
;记住,using
关键字将不起作用,但是,如果您正在使用EXECUTE IMMEDIATE
执行带参数的DDL,则使用引号将对DDL起作用。
https://stackoverflow.com/questions/11315340
复制相似问题