"1、监控表TABLE2(user_id,user_name),把每次修改的操作记录日志表LOG2(new_user_id,new_user_name,changedate,memo)
2、changedate记录修改日期。
3、如果当前修改日期-上次修改日期<3天,则memo显示“修改频繁”" 备注:
"1、函数实现修改时间间隔的运算。
2、存储过程实现是否频繁的判断。
3、触发器完成对表的监控。"
这个该如何实现呢?

解决方案 »

  1.   

    这是我写的,大侠们,帮忙看看
    VAR 
    JIANGE : NUMBER(1000);----创建存储过程,判断是否修改频繁 
    CREATE OR REPLACE PROCEDURE PAND_PINF
    AS
    BEGIN
    IF(JIANGE>3*24*60*60)  THEN 
    UPDATE LOG2 SET MEMO:='修改频繁'; 
    END PAND_PINF;---创建触发器对是否有进行修改进行监控 
    CREATE OR REPLACE TRIGGER GENGXIN AFTER UPDATE ON TABLE2 
    FOR EACH ROW
    BEGIN
    WHEN UPDATING THEN (
    INSERT INTO LOG2
    VALUES(USER_ID,
           USER_NAME,
           SYSDATE,
           :OLD.SYSDATE,
           ''); 
    JIANGE:=ROUND(TO_NUMBER(CHANGEDATE-OLDDATE)*1440);   ---  使用时间函数进行显示当前时间  EXEC PAND_PINF;
          
    END;
      

  2.   

    CREATE OR REPLACE TRIGGER GENGXIN BEFORE UPDATE ON TABLE2 FOR EACH ROW
    DECLARE
      v_memo varchar2(40);
      v_days number;
    BEGIN
      select max(changedate)-sysdate into v_days from log2 
           where new_user_id = :new.user_id and new_user_name = :new.user_name; 
      if days < 3 then 
         v_memo := '修改频繁';
      end if;
      INSERT INTO LOG2 VALUES(:new.USER_ID,:new.USER_NAME,SYSDATE,v_memo); 
       
    END;
      

  3.   

    这个编译会通过,但是运用于实际创建的两个表中无法实现真正监控。大侠,
    如----创建两个表TABLE3和LOG3 CREATE TABLE TABLE3(
    USER_ID number(3) not null primary key,--用户ID
    USER_NAME varchar2(40)      --用户名称
    );
    insert into TABLE3(USER_ID,USER_NAME) values(1,'aa');
    insert into TABLE3(USER_ID,USER_NAME) values(2,'bb');
    insert into TABLE3(USER_ID,USER_NAME) values(3,'cc');
    insert into TABLE3(USER_ID,USER_NAME) values(4,'dd');CREATE TABLE LOG3(
    NEW_USER_ID number(3),      --用户ID
    NEW_USER_NAME varchar2(40), --用户名称
    CHANGEDATE date,            --记录修改日期
    OLDDATE DATE,               ----修改前的日期 
    MEMO varchar2(225)          ---修改备注
    ); 
    INSERT INTO LOG3(NEW_USER_ID,NEW_USER_NAME,CHANGEDATE,OLDDATE,MEMO) 
    VALUES(1,'aa',to_date('2011-02-21 21:13:11','yyyy-mm-dd HH24:MI:SS'),to_date('2011-01-21 21:13:11','yyyy-mm-dd HH24:MI:SS'),'修改频繁'); 
    INSERT INTO LOG3(NEW_USER_ID,NEW_USER_NAME,CHANGEDATE,OLDDATE,MEMO) 
    VALUES(1,'ee',to_date('2011-03-21 21:13:11','yyyy-mm-dd HH24:MI:SS'),to_date('2011-02-02 21:13:11','yyyy-mm-dd HH24:MI:SS'),''); 
    ---创建触发器监视数据更改 
    CREATE OR REPLACE TRIGGER GENGXINGGG BEFORE UPDATE ON TABLE3 
    FOR EACH ROW
    DECLARE
      v_memo varchar2(40);
      v_days number;
    BEGIN
    CREATE OR REPLACE PROCEDURE PAND
    AS
    BEGIN
      select max(changedate)-sysdate into v_days from log3;  
      where new_user_id = :new.user_id and new_user_name = :new.user_name;  
      if v_days < 3 then  
      v_memo := '修改频繁';
      end if;
      END;
      INSERT INTO LOG3 VALUES(:new.USER_ID,:new.USER_NAME,SYSDATE,v_memo);  
        
    END;不知道哪里出现了问题,,,,
      

  4.   

    修改完数据的时候,每次都是报:  8:44:22  ORA-04098: 触发器 'SD_HOSPITAL.GENGXINGGG' 无效且未通过重新确认, 不知道哪里出错了,怎么更改呢??