尝试创建一个触发器来检查我的数据库中是否有超过 1 位总统
Trying to create a trigger to check if there's more than 1 president in my database
我正在尝试查找我的数据库中是否有超过 1 位总统使用触发器,如果是,则引发错误,我正在使用 hr,table 员工,我必须使用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;
您应该使用 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
之间
我正在尝试查找我的数据库中是否有超过 1 位总统使用触发器,如果是,则引发错误,我正在使用 hr,table 员工,我必须使用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;
您应该使用 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