请问oracle中trigger的种类和用法?

解决方案 »

  1.   

    CREATE OR REPLACE TRIGGER trg_drop_table
       BEFORE DROP ON DATABASE 
    declare
      PRAGMA AUTONOMOUS_TRANSACTION;
      coun number;
    BEGIN
      for c1 in (select e.table_name from user_tables e) loop
        IF upper(ora_dict_obj_name()) = c1.table_name THEN
          PETL_PUB_FUN.INSERT_ETL_LOG(PETL_PUB_FUN.LOCALNET,
                                      '安全控制',
                                      '安全控制',
                                      '主机: ' || SYS_CONTEXT('USERENV', 'HOST') ||
                                      '   IP:' ||
                                      SYS_CONTEXT('USERENV', 'IP_ADDRESS') ||
                                      '试图删除' || ora_dict_obj_name() || '表',
                                      '已记录',
                                      2,
                                      SYSDATE,
                                      SYSDATE);
          select count(*)
            into coun
            from etl_table e
           where e.table_name = c1.table_name;
          if coun > 0 then
            raise_application_error(num => -20000,
                                    msg => '主机:' ||
                                           SYS_CONTEXT('USERENV', 'HOST') ||
                                           chr(13) || 'IP:' ||
                                           SYS_CONTEXT('USERENV', 'IP_ADDRESS') ||
                                           '试图删除' || ora_dict_obj_name() || '表,系统已记录');
          end if;
        
        END IF;
      end loop;END;
      

  2.   

    帽子太大了。LZ可以先baidu一下相关内容,做两个例子,过程中出现问题再来这里提问。
      

  3.   

    种类:
    1.系统触发器
    2.对象触发器其中对象触发器按触发方式分:
    1.DDL触发器
    2.DML触发器