我的sql触发器在系统中添加登录时抛出错误,但如果没有,则不插入任何行。
有人可以说,为什么?
create or replace trigger user_login_exist_validator
before insert on USERS
for each row
declare
login varchar2(32 char) := :new.USER_LOGIN;
login_exists number(1,0) := 0;
begin
select 1 into login_exists from USERS where USER_LOGIN=login;
if login_exists > 0
then
RAISE_APPLICATION_ERROR(-20666, 'Użytkownik ' || login || ' już istnieje w systemie!!!');
end if;
end;
答案 0 :(得分:1)
看起来像一个变异表错误。
您正在尝试读取相同的数据库表,而您已经在修改其中的数据。
取消触发器可能会更好。您可以捕获异常并在执行insert语句的位置处理它。
https://docs.oracle.com/cd/B13789_01/appdev.101/b10807/07_errs.htm