sql - 如何调试 "sql subquery returns more than 1 row"错误

标签 sql oracle subquery

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

最佳答案

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

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

找到导致问题的查询后,请将其转换为具有适当group byhaving 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/

相关文章:

SQL 计算项目状态历史记录在日期范围内的项目项

MySQL 将行转为动态数量的列

c# - 如何使用 C# 将数组的元素插入到 SQL Server 数据库中?

oracle - pl/sql 设置 ORA-00922 : missing or invalid option on set serveroutput on;

php - Laravel 5.4 子查询在什么条件下?

mysql - 处理子查询,每行返回多行。数据库 : Mysql, SQL

php - 当sql结果包含多行时,如何从中单独获取每一行?

java - 验证 plsql block

SQL*Plus - 假脱机 CSV - SP2-0734 : unknown command beginnin

mysql - 使用命名子查询 DELETE FROM