【发布时间】:2017-07-25 09:54:24
【问题描述】:
我很难理解我的 pl/sql 触发器出了什么问题。 错误是: 错误报告 - SQL 错误:ORA-01422:精确提取返回的行数超过了请求的行数 ORA-06512: 在“SYSTEM.TRG_LATE_RETURN”,第 6 行 ORA-04088: 执行触发器 'SYSTEM.TRG_LATE_RETURN' 期间出错 01422. 00000 - “精确提取返回的行数超过了请求的行数” *原因:exact fetch 中指定的数字小于返回的行数。 *操作:重写查询或更改请求的行数
我的触发器如下:
create or replace trigger trg_late_return
before update of DETAIL_RETURNDATE, DETAIL_DUEDATE on TY_DETAILRENTAL
declare
temp_date DATE:= SYSDATE;
temp_due_date DATE:= SYSDATE;
BEGIN
select DETAIL_RETURNDATE
into temp_date
from TY_DETAILRENTAL;
select DETAIL_DUEDATE
into temp_due_date
from TY_DETAILRENTAL;
IF temp_date is null
THEN
update TY_DETAILRENTAL
set DETAIL_DAYSLATE=null;
END IF;
if temp_date <> null
THEN
if temp_date = trunc(temp_due_date) + 1
then
update TY_DETAILRENTAL
set DETAIL_DAYSLATE=0;
end if;
if temp_date > trunc(temp_due_date) + 1
then
update TY_DETAILRENTAL
set DETAIL_DAYSLATE = DETAIL_RETURNDATE - DETAIL_DUEDATE;
end if;
end if;
END;
/
SQL 和 PL/SQL 的新手,因此我将不胜感激。
【问题讨论】:
-
我怀疑
TY_DETAILRENTAL正好只有一行,所以你的select . . . into语句不起作用。