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

时间:2012-07-03 16:36:03

标签: 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;
/

5 个答案:

答案 0 :(得分:162)

您可以使用文字引语:

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

文字can be found here的文档。

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

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

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

答案 1 :(得分:15)

这里的a blog post应该有助于转义字符串中的刻度。

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

  

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

     

SELECT'测试单引号'''来自双重;

     

上述陈述的输出将是:

     

测试单引号'

     

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

     

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

答案 2 :(得分:11)

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

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

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

Select 'UPDATE Customers SET LName = ' || chr(39) || 'Doe' || chr(39) || ';' From dual;

答案 3 :(得分:1)

lapply(split(df[-1], df$country), function(x) { x1 <- xtabs(count ~ sex + age, droplevels(x)) x2 <- addmargins(x1) x2[-nrow(x2),-ncol(x2)] <- x2[-nrow(x2),-ncol(x2)]/x2[nrow(x2), -ncol(x2)]/x2[length(x2)] x2}) ;为我工作。 用两对单引号将=SUMPRODUCT((($A$2:$A$7="ABCD")*($B$2:$B$7="DISCONNECTED")*$C$2:$C$7))-SUMPRODUCT((($A$2:$A$7="ABCD")*($B$2:$B$7={"CONNECTED","RECONNECTED"})*$C$2:$C$7)) / EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(''ER0002'')'封闭起来就可以了。其他选择可能是使用varchar关键字string;请记住,如果您使用using来执行带参数的DDL,则EXECUTE IMMEDIATE 'insert into MY_TBL (Col) values(:text_string)' using 'ER0002'关键字将不起作用,但是,对DDL而言,使用引号将起作用。

答案 4 :(得分:0)

就我而言,我是这样使用的:

asks

添加:q'! 之前和 !' 之后的字符串。

这是另一个参考:Alternative Quoting Mechanism (''Q'') for String Literals