Oracle pl-sql转义字符(用于“'”)

时间:2012-07-30 07:37:14

标签: oracle escaping oracle11g

当我尝试在oracle中执行INSERT语句时,出现SQL Error: ORA-00917: missing comma错误,因为Alex's Tea Factory语句中的值为INSERT

我怎么能逃脱'

7 个答案:

答案 0 :(得分:43)

要逃避它,请将引号加倍:

INSERT INTO TABLE_A VALUES ( 'Alex''s Tea Factory' );

答案 1 :(得分:8)

在SQL中,您可以通过另一个引号来转义引号:

SELECT 'Alex''s Tea Factory' FROM DUAL

答案 2 :(得分:6)

您可以使用ESCAPE,如下面给出的示例

'_'外卡字符用于匹配一个字符,而'%'用于匹配任何字符的零次或多次出现。这些字符可以在SQL中转义。

SELECT name FROM emp WHERE id LIKE '%/_%' ESCAPE '/';

PL / SQL中的相同作品:

 if( id like '%/_%' ESCAPE '/' )

这仅适用于相似的模式,例如在插入中不需要转义_或%,它们无论如何都用作普通字符。在任意字符串中,只需要''转义。

答案 3 :(得分:3)

SELECT q'[Alex's Tea Factory]' FROM DUAL

答案 4 :(得分:1)

您的问题意味着您通过将字符串连接在一起来构建INSERT语句。我建议这是一个糟糕的选择,因为如果字符串是从用户输入派生的,它会让你对SQL注入攻击开放。更好的选择是使用参数标记并将值绑定到标记。如果您搜索Oracle parameter markers,您可能会找到一些有关特定实现技术的信息(例如C#和ADO,Java和JDBC,Ruby和RubyDBI等)。

分享并享受。

答案 5 :(得分:0)

不必担心语句中的每个撇号。 您可以轻松使用q' Notation.

示例

SELECT q'(Alex's Tea Factory)' FROM DUAL;

此符号中的关键组件是

  • q'表示符号的开头
  • (是一个可选符号,表示要完全转义的语句的开头。
  • 亚历克斯的茶厂(这是陈述本身)
  • )'的右括号中带有撇号的表示符号的结尾。

这样,您就可以在表示法中填充多少个撇号而不必担心它们中的每个撇号,它们都将得到安全处理。

重要提示

由于您使用过(,因此必须用)'将其关闭,并且请记住,使用其他任何符号都是可选的,例如,以下代码将与上一个完全一样运行

SELECT q'[Alex's Tea Factory]' FROM DUAL;

答案 6 :(得分:-2)

这是一种轻松在Oracle DB中转义和字符的方法

set escape '\\'

在查询中写类似

'ERRORS &\\\ PERFORMANCE';