1

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

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

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

2 回答 2

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 会将它们视为区分大小写,因此您必须确保它们与表规范匹配。

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

于 2013-08-21T08:03:10.440 回答
1

如果您的列名是,以下将执行"DEFAULT"

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

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

于 2013-08-21T08:05:38.483 回答