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