SQL引发应用程序错误触发器



This is throwing"Error:ORA-4082:NEW或OLD references not allowed in table level triggers"

我不确定哪里出了问题。错误号应该不会有什么不同吧?

    CREATE OR REPLACE TRIGGER REJECTION 
BEFORE INSERT OR UPDATE ON TEA_PREFS_T 
DECLARE temp NUMBER;
BEGIN
  SELECT COUNT(*) INTO temp FROM tea_prefs_t WHERE person = :new.drinkerid;
  IF (temp >=10) THEN
    raise_application_error(-20101, 'ERROR: CANNOT INSERT MORE THAN 10');
    ROLLBACK;
  END IF;
END;

正如错误所示,在行级触发器中只能引用新的和旧的伪行,而不是表级触发器,无论语句影响多少行,它都会触发一次。如果用不同的饮酒者ID更新了两行,触发器将使用哪个值进行查找?

要使其成为行级触发器,请添加FOR EACH ROW:

CREATE OR REPLACE TRIGGER REJECTION 
BEFORE INSERT OR UPDATE ON TEA_PREFS_T 
FOR EACH ROW
DECLARE
  temp NUMBER;
BEGIN
  SELECT COUNT(*) INTO temp FROM tea_prefs_t WHERE person = :new.drinkerid;
  IF (temp >=10) THEN
    raise_application_error(-20101, 'ERROR: CANNOT INSERT MORE THAN 10');
  END IF;
END;
/

您不能在触发器内提交或回滚;这取决于执行插入/更新的事务来决定是否执行该操作。

但是,您也不能从要插入/更新的同一个表中进行选择;至少当您尝试同时插入/更新多行时,您会从中得到一个变异表错误。

最新更新