2

我们有一个庞大的 SQL 脚本,涉及数十个表、子查询、数百个属性。它在测试数据库中完美运行,但sql subquery returns more than 1 row在生产数据库中运行时返回错误。到目前为止,该脚本运行良好。问题是,我得到的只是上面指定的单行错误,没有任何线索,确切的子查询导致错误几乎无法调试。问题是,我应该如何知道哪一行 SQL 导致了错误?有没有办法像用编程语言那样逐行“调试”它?我将 TOAD 与 Oracle 11g 一起使用。

4

1 回答 1

2

在脚本中添加printDBMS_OUTPUT.PUT_LINE命令以打印消息。和/或在脚本中使用异常处理程序。可能添加一些变量来计算或标记您所在的语句,并将其输出到异常处理程序中。

http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm

找到导致问题的查询后,将其转换为具有适当 的类似查询,group by以便having count(*) > 1您可以查看导致问题的数据。例如,如果您有一个如下所示的相关子查询:

(select name from names where id=foo.id)

然后写一个类似的查询

select id from names group by id having count(*) > 1

识别违规数据。

如果查询中有多个产生错误的子查询,您可以临时将子查询转换为使用临时表并在所有子查询中搜索重复项。

于 2013-09-19T23:51:36.837 回答