DDL触发器

1、

create or replace trigger tr_ddl

before ddl on database
declare
  l_errmsg varchar2(100) := '对不起,你无权修改';
begin
  if (Ora_dict_obj_type = 'TABLE' or Ora_dict_obj_type='INDEX' or Ora_dict_obj_type='PROCEDURE' or Ora_dict_obj_type='TRIGGER') AND
  /*(ora_dict_obj_owner ='NCCMOLTP_HNS' or ora_dict_obj_owner='NCCMHIST_HNS')  and*/  ora_login_user not in ('SYS', 'SYSTEM') and
     (Ora_sysevent = 'ALTER' OR Ora_sysevent = 'DROP' OR Ora_sysevent = 'CREATE') then
    raise_application_error(-20001,
                            ora_dict_obj_owner || '.' || ora_dict_obj_name || ' ' ||
                            l_errmsg);
  end if;
  
  /* if (Ora_dict_obj_type = 'TRIGGER' ) AND
  (ora_dict_obj_owner ='NCCMOLTP_HNS' or ora_dict_obj_owner='NCCMHIST_HNS')  and  ora_login_user not in ('SYS', 'SYSTEM') and
     (Ora_sysevent = 'ALTER' OR Ora_sysevent = 'DROP' or Ora_sysevent = 'CREATE') then
    raise_application_error(-20001,
                            ora_dict_obj_owner || '.' || ora_dict_obj_name || ' ' ||
                            l_errmsg);
  end if;*/


exception
  when no_data_found then
    null;

end;

2、

create or replace trigger tr_ddl
  before ddl on database
declare
  l_errmsg varchar2(100) := '请按照公司流程进行申请';
begin
  if (Ora_dict_obj_type = 'TABLE' or Ora_dict_obj_type = 'INDEX' or
     Ora_dict_obj_type = 'TRIGGER') AND
     ora_login_user not in ('SYS', 'SYSTEM') and
     (Ora_sysevent = 'ALTER' OR Ora_sysevent = 'DROP' OR
     Ora_sysevent = 'CREATE' OR (Ora_sysevent = 'TRUNCATE' and  sys_context('userenv','MODULE')='PL/SQL Developer')) then
    raise_application_error(-20001,
                            ora_dict_obj_owner || '.' || ora_dict_obj_name || ' ' ||
                            l_errmsg);
  end if;


exception
  when no_data_found then
    null;
end;

3、

CREATE trigger [ddl_trigger_server]  
on all server  
for  
    alter_Trigger,  
    drop_Trigger,
    alter_table 
as  
 DECLARE @v_name varchar(100);
 DECLARE @sql varchar(200);
 DECLARE @EVENTDATA XML;  
 set    @EVENTDATA=EVENTDATA();   
 select @v_name= @EVENTDATA.value ('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)')
 select @sql=@EVENTDATA.value('(/EVENT_INSTANCE/TSQLCommand)[1]','nvarchar(100)') 
 if   @v_name='tri_update_hzyl_jtda_gr'  or CHARINDEX('tri_update_hzyl_jtda_gr',@sql)>0
 begin
 PRINT '省县数据同步使用,禁止对该触发器进行操作!'  
 ROLLBACK  
 end
GO

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值