ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DDL记录

DDL记录

原创 Linux操作系统 作者:westzq1984 时间:2009-08-14 12:11:00 0 删除 编辑

以前也写过一个DDL记录的触发器,今天在METALINK上看到个更好的,抄袭下

CREATE TABLE DDL_ACTIONS
(
counter number(38)
,user_name VARCHAR2(4000)
,ddl_date VARCHAR2(26)
,ddl_type VARCHAR2(4000)
,object_type VARCHAR2(4000)
,owner VARCHAR2(4000)
,object_name VARCHAR2(4000)
,sqltext CLOB
);


CREATE OR REPLACE TRIGGER DDLTRIGGER
 AFTER DDL ON DATABASE
DECLARE
 L_CNT      BINARY_INTEGER := 0;
 L_LEN      INTEGER := 0;
 L_NO       INTEGER := 1;
 L_S        VARCHAR2(32767) := '';
 L_SQL_TEXT ORA_NAME_LIST_T;
BEGIN
 L_CNT := ORA_SQL_TXT(L_SQL_TEXT);
 FOR I IN 1 .. L_CNT LOOP
  IF L_CNT = 1 THEN
   INSERT INTO DDL_ACTIONS
    (COUNTER,
     USER_NAME,
     DDL_DATE,
     DDL_TYPE,
     OBJECT_TYPE,
     OWNER,
     OBJECT_NAME,
     SQLTEXT)
   VALUES
    (I,
     ORA_LOGIN_USER,
     TO_CHAR(SYSTIMESTAMP, 'yyyy.mm.dd hh24:mi:ss.FF'),
     ORA_SYSEVENT,
     ORA_DICT_OBJ_TYPE,
     ORA_DICT_OBJ_OWNER,
     ORA_DICT_OBJ_NAME,
     L_SQL_TEXT(I));
  ELSE
   IF L_LEN + LENGTH(L_SQL_TEXT(I)) > 32767 THEN
    -- insert
    INSERT INTO DDL_ACTIONS
     (COUNTER,
      USER_NAME,
      DDL_DATE,
      DDL_TYPE,
      OBJECT_TYPE,
      OWNER,
      OBJECT_NAME,
      SQLTEXT)
    VALUES
     (L_NO,
      ORA_LOGIN_USER,
      TO_CHAR(SYSTIMESTAMP, 'yyyy.mm.dd hh24:mi:ss.FF'),
      ORA_SYSEVENT,
      ORA_DICT_OBJ_TYPE,
      ORA_DICT_OBJ_OWNER,
      ORA_DICT_OBJ_NAME,
      L_S);
    L_LEN := LENGTH(L_SQL_TEXT(I));
    L_S   := L_SQL_TEXT(I);
    L_NO  := L_NO + 1;
   ELSE
    -- concat
    L_S   := L_S || L_SQL_TEXT(I);
    L_LEN := L_LEN + LENGTH(L_SQL_TEXT(I));
   END IF;
  END IF;
 END LOOP;
 IF L_S != '' THEN
  INSERT INTO DDL_ACTIONS
   (COUNTER,
    USER_NAME,
    DDL_DATE,
    DDL_TYPE,
    OBJECT_TYPE,
    OWNER,
    OBJECT_NAME,
    SQLTEXT)
  VALUES
   (L_NO,
    ORA_LOGIN_USER,
    TO_CHAR(SYSTIMESTAMP, 'yyyy.mm.dd hh24:mi:ss.FF'),
    ORA_SYSEVENT,
    ORA_DICT_OBJ_TYPE,
    ORA_DICT_OBJ_OWNER,
    ORA_DICT_OBJ_NAME,
    L_S);
 END IF;
END;
/

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8242091/viewspace-612318/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: SQLRepository
下一篇: ORA-01450
请登录后发表评论 登录
全部评论

注册时间:2009-04-06

  • 博文量
    251
  • 访问量
    1042183