当我尝试在oracle中执行INSERT
语句时,出现SQL Error: ORA-00917: missing comma
错误,因为Alex's Tea Factory
语句中的值为INSERT
。
我怎么能逃脱'
?
答案 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';