oracle语句中单引号内的双引号

时间:2013-08-21 07:56:12

标签: oracle

我在旧数据库中遇到以下问题。我们最近从sql迁移到了oracle,我遇到了一个插入语句,其中列名是“default”。任何想法(我不允许更改列名,这是迄今为止最好的解决方案!)?

它看起来像这样,只有十亿个列,并且它在一个大的if-when-else结构中用于验证问题,所以我不能立即删除执行。

EXECUTE IMMEDIATE 'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)'

2 个答案:

答案 0 :(得分:2)

我认为问题不在于您的列名,如本工作示例所示:

SQL> CREATE TABLE trytable (ID VARCHAR2(10), "DEFAULT" NUMBER);

Table created

SQL> BEGIN
  2     EXECUTE IMMEDIATE
  3        'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)';
  4  END;
  5  /

PL/SQL procedure successfully completed

从技术上讲,您可以拥有一个名为DEFAULT的表列名称,即使这通常是个坏主意,也会导致混淆。您只能通过双引号"语法与其进行交互,因为DEFAULT是保留字。

如果您在标识符Oracle will treat them as case-sensitive周围指定双引号,那么您必须确保它们符合表格规范。

在您的情况下,有助于获得特定的错误消息。

答案 1 :(得分:1)

如果您的列名为"DEFAULT"

,则会执行以下操作
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO TRYTABLE(ID, "DEFAULT")VALUES(''monkey1'',0)';
END;

“DEFAULT”和“默认”有所不同。