我在使用旧数据库时遇到以下问题。我们最近从 sql 迁移到 oracle,我在插入语句时遇到了问题,其中列名是“默认”。任何想法(我不允许更改列名,这将是迄今为止最好的解决方案!)?
它看起来像这样,只有十亿多列,并且它位于一个用于验证问题的大型 if-when-else 构造中,所以我不能立即放弃执行。
EXECUTE IMMEDIATE 'INSERT INTO trytable (ID, "DEFAULT") VALUES (''monkey1'', 0)'
我在使用旧数据库时遇到以下问题。我们最近从 sql 迁移到 oracle,我在插入语句时遇到了问题,其中列名是“默认”。任何想法(我不允许更改列名,这将是迄今为止最好的解决方案!)?
它看起来像这样,只有十亿多列,并且它位于一个用于验证问题的大型 if-when-else 构造中,所以我不能立即放弃执行。
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
它是一个保留字。
如果您在标识符周围指定双引号,Oracle 会将它们视为区分大小写,因此您必须确保它们与表规范匹配。
在您的情况下,获得特定的错误消息会有所帮助。
如果您的列名是,以下将执行"DEFAULT"
:
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO TRYTABLE(ID, "DEFAULT")VALUES(''monkey1'',0)';
END;
“默认”和“默认”有所不同。