gpt4 book ai didi

database - 执行触发器期间出现未知错误

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:15 25 4
gpt4 key购买 nike

我设置了一个插入/更新触发器,它可以防止员工同时存在于两个表中。它可以很好地捕获非法插入/更新,但在使用非法插入/更新测试触发器时,我还会收到另一个错误报告。

这是我的代码:

CREATE OR REPLACE TRIGGER check_foobar
BEFORE INSERT OR UPDATE OF VarX ON FOOBAR
FOR EACH ROW
DECLARE
counter NUMBER(38);
BEGIN
SELECT count(*)
INTO counter
FROM BARFOO
WHERE VarX = :NEW.VarX
GROUP BY VarX;

IF counter > 0 THEN
RAISE_APPLICATION_ERROR(-20001, 'This is an illegal insertion/update');
END IF;

EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('TEST');

END;
/

还有我不确定的 ORA-06512 和 ORA-04088 错误:

SQL> INSERT INTO DRIVER VALUES(2,  10345, 'AVAILABLE');

Error starting at line : 26 File @test.sql
In command -
INSERT INTO FOOBAR VALUES(2)
Error report -
ORA-20001: This is an illegal insertion/update
ORA-06512: at "HR.CHECK_FOOBAR", line 11
ORA-04088: error during execution of trigger 'HR.CHECK_FOOBAR'

当我为 select 语句添加异常处理程序时,我的触发器停止正常工作并且无法阻止非法插入。但是防止了执行错误。

更新:我在触发器中添加了一个组依据和一个异常,所以现在触发器仍然可以使用异常处理程序,但错误 ORA-06512 和 ORA-04088 仍然会出现非法插入/更新。

错误中提到的第11行是

GROUP BY VarX;

如有任何建议,我们将不胜感激。

最佳答案

这里没有问题,它按预期工作。

Error starting at line : 26 File @test.sql
In command -
INSERT INTO FOOBAR VALUES(2)

这是指脚本中包含 INSERT 语句的行。它告诉您此时出现了异常。

Error report -

这是显示错误堆栈:

ORA-20001: This is an illegal insertion/update

这是实际引发的异常。

ORA-06512: at "HR.CHECK_FOOBAR", line 11
ORA-04088: error during execution of trigger 'HR.CHECK_FOOBAR'

这些附加消息只是为了告诉您最初引发异常的位置,在本例中,在第 11 行的触发器中,如您所料,RAISE_APPLICATION_ERROR 所在的位置。请注意,触发器的行号是指触发器的可执行部分,因此在您的情况下,DECLARE 是第 1 行。

关于database - 执行触发器期间出现未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52048665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com