oracle语句中单引号内的双引号
我对一个旧数据库有以下问题。最近我们从sql迁移到oracle,我遇到了一个insert语句的问题,其中列名称是“default”。有什么想法吗(我不允许更改列名,这是目前为止最好的解决方案!) 它看起来是这样的,只有十亿多列,并且它位于一个用于验证问题的大型if-when-else构造中,所以我不能删除execute-immediateoracle语句中单引号内的双引号,oracle,Oracle,我对一个旧数据库有以下问题。最近我们从sql迁移到oracle,我遇到了一个insert语句的问题,其中列名称是“default”。有什么想法吗(我不允许更改列名,这是目前为止最好的解决方案!) 它看起来是这样的,只有十亿多列,并且它位于一个用于验证问题的大型if-when-else构造中,所以我不能删除execute-immediate EXECUTE IMMEDIATE 'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)
EXECUTE IMMEDIATE 'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)'
我不认为问题来自您的列名,如本工作示例所示:
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”和“DEFAULT”有区别。我不认为单引号中的双引号是个问题。但您确定可以在Oracle中使用名为DEFAULT的列(引号或不引号)?是列名
“DEFAULT”
还是“DEFAULT”
(或任何大小写组合)?你必须准确地引用它。你是对的,问题在于围绕这个区块的声明。显然Oracle很难告诉我到底哪里出了问题。。。
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO TRYTABLE(ID, "DEFAULT")VALUES(''monkey1'',0)';
END;