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

oracle语句中单引号内的双引号,oracle,Oracle,我对一个旧数据库有以下问题。最近我们从sql迁移到oracle,我遇到了一个insert语句的问题,其中列名称是“default”。有什么想法吗(我不允许更改列名,这是目前为止最好的解决方案!) 它看起来是这样的,只有十亿多列,并且它位于一个用于验证问题的大型if-when-else构造中,所以我不能删除execute-immediate EXECUTE IMMEDIATE 'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)

我对一个旧数据库有以下问题。最近我们从sql迁移到oracle,我遇到了一个insert语句的问题,其中列名称是“default”。有什么想法吗(我不允许更改列名,这是目前为止最好的解决方案!)

它看起来是这样的,只有十亿多列,并且它位于一个用于验证问题的大型if-when-else构造中,所以我不能删除execute-immediate

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;