我们有一个巨大的 SQL 脚本,涉及数十个表、子查询、数百个属性。它在测试数据库中运行良好,但在生产数据库中运行时返回 sql subquery returns more more more than 1 row
错误。到目前为止,该脚本运行良好。问题是,我得到的只是上面指定的一行错误,没有任何线索,无论哪个确切的子查询导致了错误,这使得调试几乎不可能。问题是,我如何知道哪一行 SQL 导致了错误?有什么方法可以像使用编程语言一样逐行“调试”它吗?
我将 TOAD 与 Oracle 11g 一起使用。
最佳答案
将 print
或 DBMS_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
识别违规数据。
如果查询中有多个子查询产生错误,您可以临时将子查询转换为使用临时表并搜索所有子查询是否有重复项。
关于sql - 如何调试 "sql subquery returns more than 1 row"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18903491/