关于写触发器,本论坛有很多。
看文档:
Application Developer’s Guide - Fundamentals
下载地址:
http://gigabase.idi.ntnu.no/oradoc/nav/docindex.htm
我给你个例子:
CREATE OR REPLACE TRIGGER Audit_emp
AFTER INSERT OR UPDATE OR DELETE ON Emp_tab
FOR EACH ROW
DECLARE
Time_now DATE;
Terminal CHAR(10);
BEGIN
-- get current time, and the terminal of the user:
Time_now := SYSDATE;
Terminal := USERENV(’TERMINAL’);
-- record new employee primary key
IF INSERTING THEN
INSERT INTO Audit_table
VALUES (Audit_seq.NEXTVAL, User, Time_now,
Terminal, ’Emp_tab’, ’INSERT’, :new.Empno);
-- record primary key of the deleted row:
ELSIF DELETING THEN
INSERT INTO Audit_table
VALUES (Audit_seq.NEXTVAL, User, Time_now,
Terminal, ’Emp_tab’, ’DELETE’, :old.Empno);
-- for updates, record the primary key
-- of the row being updated:
ELSE
INSERT INTO Audit_table
VALUES (audit_seq.NEXTVAL, User, Time_now,
Terminal, ’Emp_tab’, ’UPDATE’, :old.Empno);
-- and for SAL and DEPTNO, record old and new values:
IF UPDATING (’SAL’) THEN
INSERT INTO Audit_table_values
VALUES (Audit_seq.CURRVAL, ’SAL’,
:old.Sal, :new.Sal);
ELSIF UPDATING (’DEPTNO’) THEN
INSERT INTO Audit_table_values
VALUES (Audit_seq.CURRVAL, ’DEPTNO’,
:old.Deptno, :new.DEPTNO);
END IF;
END IF;
END;
你可以
看文档:
Application Developer’s Guide - Fundamentals
下载地址:
http://gigabase.idi.ntnu.no/oradoc/nav/docindex.htm
我给你个例子:
CREATE OR REPLACE TRIGGER Audit_emp
AFTER INSERT OR UPDATE OR DELETE ON Emp_tab
FOR EACH ROW
DECLARE
Time_now DATE;
Terminal CHAR(10);
BEGIN
-- get current time, and the terminal of the user:
Time_now := SYSDATE;
Terminal := USERENV(’TERMINAL’);
-- record new employee primary key
IF INSERTING THEN
INSERT INTO Audit_table
VALUES (Audit_seq.NEXTVAL, User, Time_now,
Terminal, ’Emp_tab’, ’INSERT’, :new.Empno);
-- record primary key of the deleted row:
ELSIF DELETING THEN
INSERT INTO Audit_table
VALUES (Audit_seq.NEXTVAL, User, Time_now,
Terminal, ’Emp_tab’, ’DELETE’, :old.Empno);
-- for updates, record the primary key
-- of the row being updated:
ELSE
INSERT INTO Audit_table
VALUES (audit_seq.NEXTVAL, User, Time_now,
Terminal, ’Emp_tab’, ’UPDATE’, :old.Empno);
-- and for SAL and DEPTNO, record old and new values:
IF UPDATING (’SAL’) THEN
INSERT INTO Audit_table_values
VALUES (Audit_seq.CURRVAL, ’SAL’,
:old.Sal, :new.Sal);
ELSIF UPDATING (’DEPTNO’) THEN
INSERT INTO Audit_table_values
VALUES (Audit_seq.CURRVAL, ’DEPTNO’,
:old.Deptno, :new.DEPTNO);
END IF;
END IF;
END;
你可以
解决方案 »
- 求高人优化SQL
- ORA-00932: 数据类型不一致: 应为 -, 但却获得 BLOB
- 一些oracle的基础问题,希望大家帮助我。高分回报!
- 字段值格式如下(001,2|002,2|005,3),要怎样快速的找到该字段中包含值为002,2的记录,该表中的数据量较大(百万起步),除like外有没其它方法
- 请问下SQL trace 的问题
- 请问怎么更新这样的记录?
- 为什么我的oms登录不进去?
- 求:sql语句!在线等........... thanks!!!!!!!!!!!!!!
- 为什么orcale在windows 2000 server下装不了?
- string_name%type是什么类型
- 请问oracle中的like语句?如果要查找包含%的字符串怎么做?
- 关于Oracle安装的问题!请各位老大指教。
刷新一般为操作系统所用,现已到了Oracle应用层了。
帮你up一下。
declare
id timer;
begin
id :=create_timer('timer_aaa',1000);
end;
第二个参数是毫秒。在form 级可以创建一个Trigger:when-timer-expired ,写定时器执行时的动作。
定时器是指在form 级创建一个Trigger:Pre-Form
那里创建的
DECLARE
timer_id timer;
BEGIN
timer_id := create_timer('KEYWORD',200000,REPEAT);
END;加入form级触发器
WHEN-TIMER-EXPIRED
在这里写代码就可以了!