先desc table_name看看还有其它什么字段。

解决方案 »

  1.   

    触发器一般用作在删除该表时,触发另一表的操作,而不是本表中的其它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;
      

  2.   

    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数据库的这个限制,完成这种需求??
      

  3.   

    在语句级触发器中可以执行SELECT COUNT(*) INTO pcnt FROM table_name,你是否可以考虑在行级触发器中将删除的:old.field1, :old.field2记录下来,比如插入到一个临时表中,然后在after delete语句级触发器中,再判断其是否是最后一条记录,并执行相应的动作。