对于触发器,我个人感觉能很好的解决两个关联表的数据关系,当一个表改变的时候,所设置的触发就会根据触发器里面的条件来改变要改变表的数据,
主要还是DDL(INSERT,DELETE,UPDATE)在其前面还要加上是(AFTER , BEFORE),来判断是在之前还是之后。
一个简单的触发器是这样的,比方有一个emp表,表的结构为:
CREATE TABLE EMP
(
ID NUMBER(4,0),
NAME VARCHAR2(50 BYTE) NOT NULL ENABLE,
AGE NUMBER(11,0),
SALARY NUMBER(7,2),
MARRY CHAR(1 BYTE),
BIRTHDAY DATE,
LAST_LOGIN_TIME DATE }
在来一个相同 的表:
CREATE TABLE emp_my AS SELECT * FROM EMP WHERE 1=2;
下面就建一个触发器,是当删除EMP表中的数据时把这个删除的数据放到EMP_MY表里面,
CREATE OR REPLACE TRIGGER TRIGGER_NAME
BEFORE DELETE -- 这个意思是在删除之前来执行这个触发 器。
ON EMP --- on 是必须要的 EMP是你想操作的表,
BEGIN
INSERT INTO EMP_MY (COLUMN ,....) VALUES (:OLD.COLUMN,....);
END;
触发器的一般语法:
CREATE [OR REPLACE] TRIGGER trigger_name
{BEFORE | AFTER } -- 这个选其一
{INSERT | DELETE | UPDATE [OF column [, column …]]} 这个是DDL动作,后面的是你所要执行的表中的字段,
[OR {INSERT | DELETE | UPDATE [OF column [, column …]]}...] 这个是你可以在三种动作中使用这个触发器, 中间用 OR来 连接
ON [schema.]table_name | [schema.]view_name ---- 这个是在做动作的表名
[REFERENCING {OLD [AS] old | NEW [AS] new| PARENT as parent}]
[FOR EACH ROW ] ---- 这个是代表是 行触发器
[WHEN condition] 这个是你执行表,在什么条件下来触发这个触发器 条件
PL/SQL_BLOCK | CALL procedure_name; --- 你所想要执行这个触发器之后得到的结果。用sql来表达出来
这个就是最简单的一个触发器。
还要了解更深的:请点这个:http://blog.csdn.net/indexman/article/details/8023740/