PL / SQL,如何转义字符串中的单引号?


114

在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;
/

Answers:


184

您可以使用文字引号:

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

文字文档可在此处找到

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

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

带有Q语法的文字引用机制更加灵活和可读。


19

是博客文章,应该有助于转义字符串中的滴答声。

这是上述信息中最简单的方法:

最简单和最常用的方法是使用一个单引号,并且在两侧都使用两个单引号。

从双重选择'test单引号''';

以上语句的输出为:

测试单引号”

简单地说,您需要一个额外的单引号字符来打印单引号>字符。也就是说,如果您输入两个单引号字符,Oracle将打印一个。第一个>充当转义字符。

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


13

除了上述DCookie的答案外,您还可以将chr(39)用作单引号。

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

这是一个非常简单的示例:

可以说我们有一个非常简单的表“客户”,该表有2列,分别是FirstName和LastName。我们需要将数据移入Customer2,因此我们需要生成一堆INSERT语句。

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

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


0

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使用引号将起作用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.