lucene用数据库Trigger同步索引
触发器是特定事件出现的时候,自动执行的代码块。类似于存储过程,触发器与存储过程的区别在于:存储过程是由用户或应用程序显式调用的,而触发器是不能被直接调用的。
功能:
1、 允许/限制对表的修改
2、 自动生成派生列,比如自增字段
3、 强制数据一致性
4、 提供审计和日志记录
5、 防止无效的事务处理
6、 启用复杂的业务逻辑
触发器触发时间有两种:after和before。
1、触发器的语法:CREATE [OR REPLACE] TIGGER触发器名 触发时间 触发事件
ON表名
[FOR EACH ROW]
BEGIN
pl/sql语句
END
其中:
触发器名:触发器对象的名称。
由于触发器是数据库自动执行的,因此该名称只是一个名称,没有实质的用途。
触发时间:指明触发器何时执行,该值可取:
before---表示在数据库动作之前触发器执行;
after---表示在数据库动作之后出发器执行。
触发事件:指明哪些数据库动作会触发此触发器:
insert:数据库插入会触发此触发器;
update:数据库修改会触发此触发器;
delete:数据库删除会触发此触发器。
表 名:数据库触发器所在的表。
each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
---------------------------------------------------
2.实例
Create Or Replace Trigger TRIG_kmsDOCUMENT
After Insert Or Update or Delete On KMS_MANAGER.kmsDOCUMENT
For Each Row
begin
case
when inserting then
INSERT INTO TRIGKMS_VW$_TEMP
VALUES
(TRIGkms_VW$_SEQ.NEXTVAL, :NEW.DOCID, 1, 0);
when updating then
INSERT INTO TRIGKMS_VW$_TEMP
VALUES
(TRIGkms_VW$_SEQ.NEXTVAL, :NEW.DOCID, 2, 0);
when deleting then
INSERT INTO TRIGKMS_VW$_TEMP
VALUES
(TRIGkms_VW$_SEQ.NEXTVAL, :OLD.DOCID, 3, 0);
end case;
end;
解释://TRIGkms_VW$_SEQ是一个sequence序列
NEW.DOCID:代表kmsDOCUMENT修改后字段DOCID的值.
OLD.DOCId:代表kmsDOCUMENT修改前字段DOCID的值.
----------------------------------------------------
引入回收站机制。
Create Or Replace Trigger TRIG_kmsDOCUMENT
After Update of DOCTITLE,docstatus,CRTIME,DOCVALID,DOCAUTHOR,DOCCHANNELPATH_ID,DOCID,REPLYFLAG,DOCCHANNELPATH_NAME,LIFESTATUS,CITYIDS,BRANDIDS,TARGETCUSTOMIDS,WFSTATUS Or Delete On KMS_MANAGER.Kmsdocument
For Each Row
DECLARE
new_docstatus number;
new_value number;
begin
new_docstatus := :NEW.docstatus;
new_value:=-1;
if updating then
if new_docstatus=new_value then
begin
INSERT INTO TRIGKMS_VW VALUES(TRIGkms_VW$_SEQ.NEXTVAL, :OLD.DOCID, 3, 0,sysdate);
end;
else if :NEW.docstatus<>-10 then
begin
INSERT INTO TRIGKMS_VW VALUES(TRIGkms_VW$_SEQ.NEXTVAL, :OLD.DOCID, 2, 0,sysdate);
end;
end if; end if;
end if;
if deleting then
begin
INSERT INTO TRIGKMS_VW VALUES(TRIGkms_VW$_SEQ.NEXTVAL, :OLD.DOCID, 3, 0,sysdate);
end;
end if;
end;