当我尝试INSERT
在 oracle 中执行语句时,出现SQL Error: ORA-00917: missing comma
错误,因为Alex's Tea Factory
我的INSERT
语句中有一个值。
我怎么能逃脱'
?
为了逃避它,双引号:
INSERT INTO TABLE_A VALUES ( 'Alex''s Tea Factory' );
在 SQL 中,您通过另一个引号转义一个引号:
SELECT 'Alex''s Tea Factory' FROM DUAL
您可以像下面给出的示例一样使用 ESCAPE
'_' 通配符用于匹配一个字符,而'%' 用于匹配零次或多次出现的任何字符。这些字符可以在 SQL 中转义。
SELECT name FROM emp WHERE id LIKE '%/_%' ESCAPE '/';
在 PL/SQL 中也是如此:
if( id like '%/_%' ESCAPE '/' )
这仅适用于类似的模式,例如在插入中不需要转义 _ 或 %,它们无论如何都用作纯字符。在任意字符串中,只有 ' 需要被 '' 转义。
而不是担心你声明中的每一个撇号。您可以轻松使用q' Notation.
例子
SELECT q'(Alex's Tea Factory)' FROM DUAL;
此符号中的关键组件是
q'
这表示符号的开始(
一个可选符号,表示要完全转义的语句的开始。)'
带有撇号的右括号表示符号的结束。这样,您可以在符号中填充多少撇号,而不必担心其中的每一个撇号,它们都将被安全处理。
重要的提示
既然你使用了,(
你必须用 关闭它)'
,并记住它是可选的,例如,下面的代码将与前一个一样运行
SELECT q'[Alex's Tea Factory]' FROM DUAL;
SELECT q'[Alex's Tea Factory]' FROM DUAL
您的问题意味着您正在通过将字符串连接在一起来构建 INSERT 语句。我建议这是一个糟糕的选择,因为如果字符串是从用户输入派生的,那么它会使您容易受到 SQL 注入攻击。更好的选择是使用参数标记并将值绑定到标记。如果您搜索,Oracle parameter markers
您可能会找到一些关于您的特定实现技术的信息(例如 C# 和 ADO、Java 和 JDBC、Ruby 和 RubyDBI 等)。
分享和享受。
这是一种在 oracle DB 中轻松转义 & char 的方法
set escape '\\'
并在查询中写入
'ERRORS &\\\ PERFORMANCE';