错误描述
ORACLE-04082:NEW 或OLD引用不允许在表级触发器中
解决样例
(1)创建触发器,出现问题
CREATE OR REPLACE TRIGGER trigger_cname
BEFORE DELETE on C
DECLARE
v_count number;
BEGIN
select count(*) into v_count from SC where CNO=:old.CNO;
if v_count > 0 then
raise_application_error(-20000, '已有学生选择了这门课,不能从数据库中删除该课程');
else
dbms_output.put_line('没有学生选择该课程,将从数据库删除该课程');
end if;
END trigger_cname;
/
(2)解决问题
CREATE OR REPLACE TRIGGER trigger_cname
BEFORE DELETE on C
FOR EACH ROW
DECLARE
v_count number;
BEGIN
select count(*) into v_count from SC where CNO=:old.CNO;
if v_count > 0 then
raise_application_error(-20000, '已有学生选择了这门课,不能从数据库中删除该课程');
else
dbms_output.put_line('没有学生选择该课程,将从数据库删除该课程');
end if;
END trigger_cname;
/
说明:在表级触发器中使用OLD或NEW应添加FOR EACH ROW