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

use*_*234 102 oracle plsql

在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;
/
Run Code Online (Sandbox Code Playgroud)

DCo*_*kie 172

您可以使用文字引用:

stmt := q'[insert into MY_TBL (Col) values('ER0002')]';
Run Code Online (Sandbox Code Playgroud)

文字的文档可以在这里找到.

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

stmt := 'insert into MY_TBL (Col) values(''ER0002'')';
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢,使用双单引号就足以转义单引号。 (2认同)

cbo*_*ler 17

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

这是帖子中最简单的方法:

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

从双重中选择"测试单引号";

上述声明的输出将是:

测试单引号'

只需说明您需要额外的单引号字符来打印单引号>字符.也就是说,如果你输入两个单引号字符,Oracle将打印一个.第一个>一个就像一个转义字符.

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


Cor*_*n01 12

除了上面的DCookie的答案,您还可以使用chr(39)作为单引号.

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

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

Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual;
Run Code Online (Sandbox Code Playgroud)