Sql ORA-01422,但查询工作正常

Sql ORA-01422,但查询工作正常,sql,oracle,ora-01422,Sql,Oracle,Ora 01422,我真是疯了。 我现在正在写一个触发器来改变一些日期。为此,我想在变量中输入一个max值,如下所示: SELECT date INTO datevar FROM table WHERE date = (SELECT MAX(date) FROM table WHERE condition = lo

我真是疯了。 我现在正在写一个触发器来改变一些日期。为此,我想在变量中输入一个max值,如下所示:

SELECT date INTO datevar
               FROM table
               WHERE date = (SELECT MAX(date)
                                    FROM table
                                    WHERE condition = loop.condition);
触发器总是在该查询的行上抛出ORA-01422(返回的行太多);但是当我在sqldeveloper中尝试查询(用数字替换循环值)时,对于任何数据集,查询都可以正常工作(works fine=只返回一行)

我尝试了不同的方法在var中选择最大值,但每次都是相同的问题。循环工作正常(当我使用详细日志记录以存储过程的形式运行触发器时,我会看到循环行id和所有内容),但它总是以所述错误开始,而不会写入数据库


我也在网上搜索过,但什么也没找到。如果您有任何想法,我将不胜感激。

您为什么要运行如此复杂的查询?替换为:

SELECT MAX(date) INTO datevar
FROM table
WHERE condition = loop.condition;

这不会产生这样的错误。

为什么要运行如此复杂的查询?替换为:

SELECT MAX(date) INTO datevar
FROM table
WHERE condition = loop.condition;

这不会产生这样的错误。

如果有两行的日期恰好是最新日期,那么这将失败,而这可能失败,而Gordon的简单方法不能;你确定是那句话出错了吗?触发器错误中的行号是从PL/SQL部分(即
declare
begin
)开始计算的,而不是
create trigger
行,这可能会造成混淆。如果两行的日期恰好是最晚的日期,那么这将失败,而Gordon的简单方法则不会失败;你确定是那句话出错了吗?触发器错误中的行号是从PL/SQL部分(即
declare
begin
)开始计算的,而不是
create trigger
行,这可能会让人困惑。这是我后来发现的修复方法,但我可以发誓这是我第一次编写查询时尝试的方法。现在似乎有效这是我后来找到的修复方法,但我可以发誓这是我第一次编写查询时尝试的方法。现在似乎有用