Sql ORA-01422,但查询工作正常
我真是疯了。 我现在正在写一个触发器来改变一些日期。为此,我想在变量中输入一个max值,如下所示: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
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
行,这可能会让人困惑。这是我后来发现的修复方法,但我可以发誓这是我第一次编写查询时尝试的方法。现在似乎有效这是我后来找到的修复方法,但我可以发誓这是我第一次编写查询时尝试的方法。现在似乎有用