38

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

我怎么能逃脱'

4

7 回答 7

66

为了逃避它,双引号:

INSERT INTO TABLE_A VALUES ( 'Alex''s Tea Factory' );
于 2012-07-30T07:39:17.063 回答
12

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

SELECT 'Alex''s Tea Factory' FROM DUAL
于 2012-07-30T07:39:03.290 回答
8

您可以像下面给出的示例一样使用 ESCAPE

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

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

在 PL/SQL 中也是如此:

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

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

于 2012-07-30T09:05:09.440 回答
8

而不是担心你声明中的每一个撇号。您可以轻松使用q' Notation.

例子

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

此符号中的关键组件是

  • q'这表示符号的开始
  • (一个可选符号,表示要完全转义的语句的开始。
  • 亚历克斯的茶厂(声明本身)
  • )'带有撇号的右括号表示符号的结束。

这样,您可以在符号中填充多少撇号,而不必担心其中的每一个撇号,它们都将被安全处理。

重要的提示

既然你使用了,(你必须用 关闭它)',并记住它是可选的,例如,下面的代码将与前一个一样运行

SELECT q'[Alex's Tea Factory]' FROM DUAL;
于 2019-04-09T02:24:14.497 回答
6
SELECT q'[Alex's Tea Factory]' FROM DUAL
于 2017-01-25T04:32:36.437 回答
2

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

分享和享受。

于 2012-07-30T11:16:02.260 回答
-2

这是一种在 oracle DB 中轻松转义 & char 的方法

set escape '\\'

并在查询中写入

'ERRORS &\\\ PERFORMANCE';
于 2020-08-27T05:27:38.320 回答