尽管语法不正确,但Oracle脚本不会生成错误

时间:2012-08-20 12:37:53

标签: sql oracle syntax-error oracle-sqldeveloper

我已经为表编写了一个迁移脚本。我测试了它并在克隆的数据库(db2)上运行它并且它成功了,sqldeveloper也报告没有问题。但是,此脚本在insert语句中包含语法错误并且应该失败; 它在我的数据库的db1实例上失败(正确) - 这些数据库是相同的副本,尽管存储在不同的硬件上位置。我将错误标识为insert语句中的一个字段,该字段应该保留为NULL,因为它用abc替换值xyz。 (基本上是重命名)

以下迁移脚本的摘录:

INSERT INTO EXAMPLE_A
SELECT
B_VAL_EXAMPLE_LRB,
NULL,           --B_NEW_VAL1_YN,
NULL,           --B_NEW_VAL2_YN,
NULL,                       --Location for B_OTHER_ABC_SPECIFY
B_PROGRAM_ID,
--After
A_VAL_EXAMPLE_LRB,
NULL,           --A_NEW_VAL1_YN,
NULL,           --A_NEW_VAL2_YN,
NULL,                       --Location for A_OTHER_ABC_SPECIFY
A_PROGRAM_ID
FROM EXAMPLE_A_BAK;

上面的示例可以正常工作,并且可以在两个数据库实例上运行。 下面的示例适用于数据库,表中没有数据(db2),但数据库中没有数据(db1) - 可能这是我的问题? 我需要尝试解释并理解为什么带错误的脚本能够在不产生错误的情况下运行到数据库实例中。

INSERT INTO EXAMPLE_A
SELECT
B_VAL_EXAMPLE_LRB,
NULL,           --B_NEW_VAL1_YN,
NULL,           --B_NEW_VAL2_YN,
B_OTHER_ABC_SPECIFY,        --Location for B_OTHER_ABC_SPECIFY
B_PROGRAM_ID,
--After
A_VAL_EXAMPLE_LRB,
NULL,           --A_NEW_VAL1_YN,
NULL,           --A_NEW_VAL2_YN,
A_OTHER_ABC_SPECIFY,        --Location for A_OTHER_ABC_SPECIFY
A_PROGRAM_ID
FROM EXAMPLE_A_BAK;

是否可能有不同版本的sqldeveloper - 甚至是oracle解析查询的问题可能是解释?

也许我一直在看这个太久而且具有讽刺意味的东西,但任何帮助都会很棒。同一数据库的两个实例之间的唯一区别是,在我尝试迁移之前,db1已经在表中已有数据。

1 个答案:

答案 0 :(得分:1)

根据您的错误消息,表Example_A_Bak不包含A_OTHER_ABC_SPECIFY列。

我倾向于相信错误信息,并查看该表的定义。

第一个版本没有在Example_A_Bak中提及该字段,因此不会出错。

我不相信这与表格是否已有数据有关。我不知道Oracle会对列的评估进行短路,因为该表没有数据,尽管这是可能的。