"1、监控表TABLE2(user_id,user_name),把每次修改的操作记录日志表LOG2(new_user_id,new_user_name,changedate,memo)
2、changedate记录修改日期。
3、如果当前修改日期-上次修改日期<3天,则memo显示“修改频繁”" 备注:
"1、函数实现修改时间间隔的运算。
2、存储过程实现是否频繁的判断。
3、触发器完成对表的监控。"
这个该如何实现呢?
2、changedate记录修改日期。
3、如果当前修改日期-上次修改日期<3天,则memo显示“修改频繁”" 备注:
"1、函数实现修改时间间隔的运算。
2、存储过程实现是否频繁的判断。
3、触发器完成对表的监控。"
这个该如何实现呢?
解决方案 »
- 是不是可以通过固定执行计划 强制查询不通过索引
- Oracle打不开Database Configuration Assistant
- 新手emp,dept查询问题
- 急!!!ORACLE中怎样将一个表映射到内存中??在线等待
- 外表加载去空格的问题
- pl/sql中 select into 变量 --该变量是否可以是数组或相当于数组
- 游标能不能循环多次?
- 如何删除JOBS?
- ORA-12154: TNS:could not resolve the connect identifier specified
- ORACLE常用的软件有哪些啊
- mapinfo easyloader连接不了数据库
- Oracle 多用户共用临时表问题
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;
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;
如----创建两个表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;不知道哪里出现了问题,,,,