如何使用系统触发器?

lialin 2004-11-02 04:01:10
我想建立一个监视所有数据库表的变动情况的一个日志,即想每一个表的列删除或者新增加时增加一个记录!
不知道如何来确定当前操作表及列的属性,像行级有new和old来用,这个触发器就不知道用什么了,找了半天帮助也没有介绍的,郁闷!

create or replace trigger tri_createtable
before alter on life.schema
-- local variables here
begin
null;
dbms_output.put_line('drop table ');

insert into t_Object_change_log (object_name,object_type,Opt_Type,Opt_Content,Opt_Date) values
(表名,'table','drop table',表名,sysdate);
end tri_createtable;

...全文
105 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
lialin 2004-11-02
  • 打赏
  • 举报
回复
alter_column:=ora_is_alter_column('FOO');
不可以知道当前改变的列么?如果有很多列的话不是很麻烦,如果去判断!
不知道怎么搞的,帮助文档就看不到这方面的信息,刚才还是看原来项目里面写的找到这几个系统对象!DICTIONARY_OBJ_NAME DICTIONARY_OBJ_TYPE
zmgowin 2004-11-02
  • 打赏
  • 举报
回复
再转一篇:
系统环境:
1、操作系统:Windows 2000
2、数据库: Oracle 8i R2 (8.1.6) for NT 企业版
3、安装路径:C:\ORACLE

说明:

SQL> col OBJECT_NAME format a20

SQL> SELECT OBJECT_NAME,                        --对象名
      OBJECT_TYPE,                        --对象类型
      TO_CHAR(CREATED, 'YYYY-Mon-DD HH24:MI') CREATE_TIME, --创建时间
      TO_CHAR(LAST_DDL_TIME, 'YYYY-Mon-DD HH24:MI') MOD_TIME,   --修改时间
      TIMESTAMP,                         --时间戳
      STATUS                           --状态
  FROM USER_OBJECTS
   WHERE to_char(LAST_DDL_TIME,'yyyymmdd')>'&日期变量';


create table ddl_event (ddl_time date,modified varchar2(200));
create or replace trigger ddl_event
after DDL on schema
begin
insert into ddl_event(ddl_time,modified)
values(sysdate,ora_dict_obj_type || ' ' || ora_dict_obj_name || ' is ' || ora_sysevent);
end;
zmgowin 2004-11-02
  • 打赏
  • 举报
回复
系统级触发器中也有许多属性可以调用来进行判断,如判断表的一列是否是否改动了:
if (ora_sysevent='ALTER' and ora_dict_obj_type='TABLE') then
alter_column:=ora_is_alter_column('FOO');
end if;

其它的还有许多,可以在网上找找

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧