我们需要在表中存储一个select语句
select * from table where col = 'col'
但单引号混淆了插入声明。
有可能以某种方式这样做吗?
答案 0 :(得分:7)
从Oracle 10G开始,可以选择加倍单引号:
insert into mytable (mycol) values (q'"select * from table where col = 'col'"');
我使用双引号字符(“),但您可以指定另一个字符,例如:
insert into mytable (mycol) values (q'@select * from table where col = 'col'@');
文字的语法是:
q'<special character><your string><special character>'
在这样的小例子中,它显然不具有可读性,但它可以带来大量文本,例如。
insert into mytable (mycol) values (
q'"select empno, ename, 'Hello' message
from emp
where job = 'Manager'
and name like 'K%'"'
);
答案 1 :(得分:4)
你是如何进行插入的?如果您在前端使用任何类型的提供程序,那么它应该为您格式化字符串,以便引号不是问题。
基本上,创建一个参数化查询并将SQL语句的值赋给参数类实例,然后让db层为你处理它。
答案 2 :(得分:3)
您可以使用两个引号''
来表示单引号'
或(使用10g +)您也可以使用new notation:
SQL> select ' ''foo'' ' txt from dual;
TXT
-------
'foo'
SQL> select q'$ 'bar' $' txt from dual;
TXT
-------
'bar'
答案 3 :(得分:2)
如果您使用的是JAVA或C#等编程语言,则可以使用预准备(参数化)语句将值放入并检索它们。
如果你在SQLPlus中,你可以像这样逃避撇号:
insert into my_sql_table (sql_command)
values ('select * from table where col = ''col''');
答案 4 :(得分:2)
通过复制单引号进行转义:
INSERT INTO foo (sql) VALUES ('select * from table where col = ''col''')
但是,大多数数据库都提供绑定参数,因此您无需关心这些细节:
INSERT INTO foo (sql) VALUES (:sql)
...然后将值赋给:sql。
答案 5 :(得分:2)
不要将SQL语句存储在数据库中!!
将 SQL视图存储在数据库中。如果必须使它们更清洁,请将它们放在架构中。如果将SQL语句存储在数据库中,就没有任何好处,如果没有记录,这绝对是一个坏主意。
此外,如果你使用10g,你必须这样做:做对了!根据{{3}}
Use the 10g Quoting mechanism:
Syntax
q'[QUOTE_CHAR]Text[QUOTE_CHAR]'
Make sure that the QUOTE_CHAR doesnt exist in the text.
SELECT q'{This is Orafaq's 'quoted' text field}' FROM DUAL;