尝试创建触发器以检查我的数据库中是否有超过1位总裁

问题描述 投票: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;
oracle plsql database-trigger raiseerror
1个回答
0
投票

您应该通过删除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

© www.soinside.com 2019 - 2024. All rights reserved.