如何在 plsql 中回滚列及其触发器?

How to rollback a column and its trigger in plsql?

我有一个小任务。首先,我在 table 中添加了一个具有特定约束的列。然后我为其他工作添加了一个触发器。 但是我需要回滚sql 并且不知道该怎么做。任何人都可以帮助或提供建议吗?我正在添加我的 sql 片段。

    ALTER TABLE FCBSADM.GL_DEF ADD GL_TP NUMBER;

    ALTER TABLE FCBSADM.GL_DEF ADD CONSTRAINTS CH_COL CHECK (GL_TP between 1 and 10);

    CREATE OR REPLACE TRIGGER GL_DEF_GL_TP_TRG
   BEFORE INSERT OR
          DELETE OR
          UPDATE OF CDATE, CMPNY_DEF_ID, CUSER, DESCR, GL_DEF_ID, MNY_TP_ID, ST, UDATE, UUSER, GL_TP
          ON FCBSADM.GL_DEF
   FOR EACH ROW
DECLARE
cnt number := 0;
BEGIN
   IF INSERTING
   THEN   
      IF :NEW.GL_TP = 2        
      THEN
      SELECT 1 into cnt from dual where exists( select *  
                   FROM LOOKUP_GLCODE_IND_CEZA lookup
                  WHERE     lookup.indirim_glcode = :NEW.gl_Def_id);
        IF (cnt = 1) THEN                      
         raise_application_error 
         (-20101, 'Please insert record into LOOKUP_GLCODE_IND_CEZA before inserting GL_DEF');
         END IF;
     END IF;
   END IF;
END;

您想回滚什么?添加列并创建触发器?如果是这样,放弃他们,两个。

alter table gl_def drop column gl_tp;

drop trigger gl_def_gl_tp_trg;

触发器和新添加的table只能使用drop和alter语句回滚。如果它是在只执行几次的脚本中完成的,这没问题。但是,如果对 n 条记录频繁调用 drop 和 alter,则效率非常低。