0

我已经为一个表编写了一个迁移脚本。我对其进行了测试并在克隆的数据库(db2)上运行它,它是成功的,sqldeveloper 也没有报告任何问题。但是,此脚本在插入语句中包含语法错误,应该失败;它在我的数据库的 db1 实例上失败(正确) - 这些数据库是相同的副本,尽管存储在不同位置的不同硬件上。我将错误标识为插入语句中的一个字段,该字段应该保留为 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;

上面的示例可以正常工作,并且可以在两个 db 实例上工作。下面的示例适用于表上没有数据的数据库(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 的表中已经存在数据。

4

1 回答 1

1

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

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

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

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

于 2012-08-20T13:12:18.890 回答