» 游客:  注册 | 登录 | 会员 | 统计 | 帮助
斑竹的菜园子
 

作者:
标题: 触发器的创建 上一主题 | 下一主题
borneol
管理员




积分 10952
发贴 955
注册 2005-2-23
来自 重庆
状态 离线
#1  触发器的创建

触发器和我们前面讲的执行型存储过程非常类似,不同的是执行型存储过程必需由客户调用执行,而触发器只是在某个事件发生才执行,它不必由客户调用。触发器主要在表被更新、插入、删除时被触发,因此,它可以用来跟踪用户对表的更新情况。先看看创建触发器的语法:

CREATE TRIGGER name FOR table
[ACTIVE | INACTIVE]
{BEFORE | AFTER}
{DELETE | INSERT | UPDATE}
[POSITION number]
AS <trigger_body> terminator

<trigger_body> = [<variable_declaration_list>] <block>
<variable_declaration_list> =
DECLARE VARIABLE variable <datatype>;
[DECLARE VARIABLE variable <datatype>;
<block> =
BEGIN
<compound_statement>
[<compound_statement>
END

<datatype> = SMALLINT
| INTEGER
| FLOAT
| DOUBLE PRECISION
| {DECIMAL | NUMERIC} [(precision [, scale])]
| {DATE | TIME | TIMESTAMP)
| {CHAR | CHARACTER | CHARACTER VARYING | VARCHAR}
[(int)] [CHARACTER SET charname]

| {NCHAR | NATIONAL CHARACTER | NATIONAL CHAR} [VARYING] [(int)]


从上面的语法可以看出,Interbase 的触发器可以跟踪表的下列变化情况:

BEFORE DELETE 在表删除一条记录之前触发
BEFORE INSERT 在表插入一条记录之前触发
BEFORE UPDATE 在表更新一条记录之前触发
AFTER DELETE 在表删除一条记录之后触发
AFTER INSERT 在表插入一条记录之后触发
AFTER UPDATE 在表更新一条记录之后触发

举例如下:

CREATE TRIGGER DELBM FOR FPCSIGNUP
ACTIVE BEFORE DELETE POSITION 0
AS /*
Author : TangHui
Date : 2000-06-28 20:36:22
Email : 3asoft@china.com
*/

BEGIN
/*将数据转入回收站*/
INSERT INTO BM_WASTEBIN
select *
from FPCSIGNUP
where old.SUAUTO=SUAUTO;

update BM_WASTEBIN
SET SUMODIFY=USER,
/*删除人员*/
SUMODIFY_DATE='NOW',
/*删除日期*/
WHERE SUAUTO=old.SUAUTO;
END

上面的例子是在用户删除数据时,将删除的数据放在一个所谓的回收站的表BM_WASTEBIN中。
【注意】在上面的触发器中我们引用了old标识符,除此之外,Interbase还可引用new标识符,它们分别代表记录的当前值和更新前的值。
因此,多逻辑上来判断,在删除记录时,我们不能使用new标识符,而在插入记录时,我们不能使用old标识符。



0200 1D 06 00 00 A0 86 01 00 FF FF 00 00 1E 06 00 00
         E-mail:webmaster@chenzhang.com
         MSN:borneol_net@hotmail.com
         Home page:www.chenzhang.com
0210 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
2005-3-10 14:41
查看资料  发送邮件  访问主页  发短消息  QQ   编辑帖子  引用回复


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: