触发器一般用作在删除该表时,触发另一表的操作,而不是本表中的其它DML操作。 CREATE OR REPLACE TRIGGER trigger_name BEFORE DELETE ON table_name FOR EACH ROW DECLARE pcnt number; BEGIN SELECT COUNT(*) INTO pcnt FROM table_name; IF pcnt=1 then { //当该表中符合条件的记录是最后一条时,处理 } end if; END;
CREATE OR REPLACE TRIGGER trigger_name BEFORE DELETE ON table_name FOR EACH ROW DECLARE pcnt number; BEGIN SELECT COUNT(*) INTO pcnt FROM table_name; IF pcnt=1 { //当该表中符合条件的记录是最后一条时,处理 } end if; END; 在表的行级触发器中,如果是before inserting条件,可以在执行体内执行 SELECT COUNT(*) INTO pcnt FROM table_name; 如果是before deleting条件,在执行体内执行 SELECT COUNT(*) INTO pcnt FROM table_name;会报错。 有什么方法可以绕过oracle数据库的这个限制,完成这种需求??
在语句级触发器中可以执行SELECT COUNT(*) INTO pcnt FROM table_name,你是否可以考虑在行级触发器中将删除的:old.field1, :old.field2记录下来,比如插入到一个临时表中,然后在after delete语句级触发器中,再判断其是否是最后一条记录,并执行相应的动作。
CREATE OR REPLACE TRIGGER trigger_name
BEFORE DELETE ON table_name
FOR EACH ROW
DECLARE
pcnt number;
BEGIN
SELECT COUNT(*) INTO pcnt FROM table_name;
IF pcnt=1 then
{
//当该表中符合条件的记录是最后一条时,处理
}
end if;
END;
BEFORE DELETE ON table_name
FOR EACH ROW
DECLARE
pcnt number;
BEGIN
SELECT COUNT(*) INTO pcnt FROM table_name;
IF pcnt=1
{
//当该表中符合条件的记录是最后一条时,处理
}
end if;
END;
在表的行级触发器中,如果是before inserting条件,可以在执行体内执行 SELECT COUNT(*) INTO pcnt FROM table_name;
如果是before deleting条件,在执行体内执行 SELECT COUNT(*) INTO pcnt FROM table_name;会报错。
有什么方法可以绕过oracle数据库的这个限制,完成这种需求??