如何在oracle表中存储sql语句?

时间:2010-02-16 16:22:28

标签: sql oracle select

我们需要在表中存储一个select语句

select * from table where col = 'col'

但单引号混淆了插入声明。

有可能以某种方式这样做吗?

6 个答案:

答案 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;