如何在字符串中转义单引号?

在 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;
/
371525 次浏览

你可以直接引用:

stmt := q'[insert into MY_TBL (Col) values('ER0002')]';

文字文档 可以在这里找到

或者,您可以使用两个引号来表示一个单引号:

stmt := 'insert into MY_TBL (Col) values(''ER0002'')';

使用 Q 语法的文字引用机制更加灵活和易读,IMO。

下面的 一篇博客文章应该有助于转义字符串中的刻度。

下面是上述帖子中最简单的方法:

最简单和最常用的方法是使用一个两边都有两个单引号的单引号。

SELECT 'test single quote''' from dual;

上述说明的产出将是:
测试单个报价’

只需声明您需要额外的单引号字符来打印单引号字符。也就是说,如果您放置两个单引号字符,Oracle 将打印其中一个。第一个角色扮演逃脱角色。

这是在 Oracle 中打印单引号的最简单方法。但是当您必须打印一组引号而不仅仅是一个引号时,就会变得复杂。在这种情况下,下面的方法可以很好地工作。但它需要更多的打字工作。

除了上面 DCookie 的回答之外,您还可以使用 chr (39)作为单引号。

当我必须基于大量现有数据创建大量插入/更新语句时,我发现这特别有用。

这里有一个很快的例子:

假设我们有一个非常简单的表 Customer,它有两列 FirstName 和 LastName。我们需要将数据移动到 Customers2中,因此需要生成一组 INSERT 语句。

Select 'INSERT INTO Customers2 (FirstName, LastName) ' ||
'VALUES (' || chr(39) || FirstName || chr(39) ',' ||
chr(39) || LastName || chr(39) || ');' From Customers;

我发现这在将数据从一个环境移动到另一个环境或快速重建环境时非常有用。

为我工作。 用两对单引号结束 varchar/string就可以了。其他选择可以是使用 using关键字,EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002'; 记住 using关键字将不工作,如果您使用 EXECUTE IMMEDIATE执行 DDL 的参数,但是,使用引号将工作的 DDL。

对于我来说,我是这样使用的:

stmt := q'!insert into MY_TBL (Col) values('ER0002')!';

添加: 字符串前面的 Q!和字符串后面的 !'

这是另一个参考: 字符串字面值的替代引用机制(“ Q”)