2013-08-21 128 views
1

我遇到以下问题与旧数据库。我们最近从sql迁移到oracle,并且在列名称为“default”的插入语句中遇到问题。任何想法(我不允许改变列名,这将是最好的解决方案!)?oracle语句中的单引号内的双引号

它看起来有点像这样,只有十亿多列,它在一个很大的if-when-else构造中用于验证问题,所以我不能删除execute immediate。

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

我不认为单引号内的双引号是一个问题。但是你确定你可以在Oracle中有一个名为DEFAULT的列(引用或不引用)? – Thilo

+3

列名称是“default”还是“DEFAULT”(或套管的任何组合)?你必须像你引用它一样被引用。 – Ben

回答

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,因此您必须确保它们与表格规格匹配。

就你而言,这将有助于产生特定的错误信息。

+0

你是对的,问题在于围绕这个区块的陈述。显然甲骨文很难告诉我哪里出错了...... – user2681745

+0

太棒了; ........................ – deFreitas

1

下面的意志执行,如果你的列名是"DEFAULT"

BEGIN 
EXECUTE IMMEDIATE 'INSERT INTO TRYTABLE(ID, "DEFAULT")VALUES(''monkey1'',0)'; 
END; 

“Default” 和 “默认”,使差异。