0

我正在尝试查找我的数据库中是否有超过 1 位带触发器的总裁,如果是,则引发错误,我正在使用 hr,表employees 并且我必须使用 job_id 来查找它。这是我的代码的样子。谢谢!

CREATE OR REPLACE TRIGGER check_pres
BEFORE INSERT OR DELETE OR UPDATE ON employees
FOR EACH ROW
BEGIN
    IF ((employees.job_id = 'AD_PRES') > 1)
    THEN RAISE_APPLICATION_ERROR(-12345, 'More than one President in database.');
    END IF;
END;
4

1 回答 1

1

您应该使用Statement Level Trigger而不是Row Level Trigger删除FOR EACH ROW表达式

CREATE OR REPLACE TRIGGER check_pres
  BEFORE INSERT OR DELETE OR UPDATE ON employees
DECLARE    
    v_cnt int;
BEGIN

    SELECT COUNT(*) INTO v_cnt FROM employees WHERE job_id = 'AD_PRES';

  IF ( v_cnt > 1 ) THEN
    RAISE_APPLICATION_ERROR(-20345, 'More than one President in database.');
  END IF;
END;

否则在获取计数值时会出现变异错误。顺便说一句,第一个参数值RAISE_APPLICATION_ERROR应该在-20999-20000

于 2020-04-13T23:38:27.000 回答