免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4261 | 回复: 15
打印 上一主题 下一主题

简单的sql,触发器问题,新手报到 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-27 14:07 |只看该作者 |倒序浏览
10可用积分
create trigger biufer_employees_department_id
        before insert or update
               of department_id
               on employees
        referencing old as old_value
                        new as new_value
        for each row
        when (new_value.department_id<>80 )
  begin
        :new_value.commission_pct :=0;
  end;

referencing old as old_value
                        new as new_value 是什么意思??

论坛徽章:
0
2 [报告]
发表于 2008-11-27 16:36 |只看该作者
create trigger biufer_employees_department_id
        before insert or update
               of department_id
               on employees
        referencing old as old_value
                        new as new_value
        for each row
        when (new_value.department_id<>80 )
  begin
        :new_value.commission_pct :=0;
  end;

是一个很典型的row-level trigger,old_value,new_value只是代表你所更新的field,referencing old as old_value
                        new as new_value 只是用来给:new,ld 指定一个不同的name,方便使用。

论坛徽章:
0
3 [报告]
发表于 2008-11-27 19:50 |只看该作者
你的话,我还是没看明白!!

再详细点!谢谢!

论坛徽章:
0
4 [报告]
发表于 2008-11-27 19:52 |只看该作者
还在吗??大侠

论坛徽章:
0
5 [报告]
发表于 2008-11-27 19:54 |只看该作者
没人啊啊,人是真少啊!!

论坛徽章:
0
6 [报告]
发表于 2008-11-27 19:55 |只看该作者
我要晕倒了!!

论坛徽章:
1
丑牛
日期:2014-08-07 17:07:05
7 [报告]
发表于 2008-11-27 21:09 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
8 [报告]
发表于 2008-11-27 21:31 |只看该作者
我刚听说  那句话的作用是  当插入 删除 修改  一个表是,如果插入的表的内容是表中已经存在的,则不插入,修改,删除。
就是说  新的值 必须是真正表中没有的新的值才会触发  触发器。感觉应该是这样的。


大侠们,你们认为呢?》??

论坛徽章:
0
9 [报告]
发表于 2008-11-28 08:36 |只看该作者
CREATE TRIGGER 语句

--------------------------------------------------------------------------------

说明
此语句用于在表中创建触发器。

语法
CREATE TRIGGER trigger-name trigger-time { trigger-event-list | UPDATE OF column-list }
[ ORDER integer ] ON table-name
[ REFERENCING [ OLD AS old-name ]
                            [ NEW AS new-name ] ]
                            [ REMOTE AS remote-name ] ]
[ FOR EACH { ROW | STATEMENT } ]
[ WHEN ( search-condition ) ]
  compound-statement

trigger-time : BEFORE | AFTER | RESOLVE

trigger-event-list : trigger-event [ , trigger-event ]

trigger-event :
DELETE | INSERT | UPDATE

论坛徽章:
0
10 [报告]
发表于 2008-11-28 08:37 |只看该作者
参数
触发器事件    触发器可以由以下一个或多个事件触发:

DELETE    每当删除关联表中的行时激活。

INSERT    每当有新行插入到与触发器关联的表中时激活。

UPDATE    每当更新关联表中的行时激活。

UPDATE OF column-list    每当更新关联表中的行和修改 column-list 中的列时激活。

您可以为需要处理的每个事件分别编写触发器,或者,如果您有一些共享操作以及一些取决于事件的操作,您可以为所有事件创建触发器并使用 IF 语句区分所发生的操作。

有关详细信息,请参见 IF 语句。

trigger-time    可以定义行级触发器在插入、更新或删除之前 (BEFORE) 或之后 (AFTER) 执行。语句级触发器在语句后 (AFTER) 执行。RESOLVE 触发器时间用于 SQL Remote:它只在行级 UPDATE 或 UPDATE OF 列列表之前触发。

只要行中发生更新,BEFORE UPDATE 触发器就会触发,而不论新值是否与旧值不同。AFTER UPDATE 触发器只在新值与旧值不同时才触发。

FOR EACH 子句    要将触发器声明为行级触发器,请使用 FOR EACH ROW 子句。要将触发器声明为语句级触发器,可以使用 FOR EACH STATEMENT 子句或忽略 FOR EACH 子句。为清楚起见,建议在声明语句级触发器时输入 FOR EACH STATEMENT 子句。

ORDER 子句    同时触发(之前、之后或解析)的同类型触发器可以使用 ORDER 子句确定触发器的触发顺序。指定 ORDER 0 等效于忽略 ORDER 子句。

REFERENCING 子句    REFERENCING OLD 和 REFERENCING NEW 子句允许引用已插入、删除或更新的行。在此子句中,UPDATE 处理为删除后插入。

INSERT 用到 REFERENCING NEW 子句,代表插入的行。但不用 REFERENCING OLD 子句。

DELETE 用到 REFERENCING OLD 子句,代表删除的行。但不用 REFERENCING NEW 子句。

UPDATE 用到 REFERENCING OLD 子句,代表更新前的行;并用到 REFERENCING NEW 子句,代表更新后的行。

REFERENCING OLD 和 REFERENCING NEW 的含义不同,具体取决于触发器是行级还是语句级触发器。对于行级触发器,REFERENCING OLD 子句允许引用更新或删除之前行中的值,REFERENCING NEW 子句允许引用已插入或更新的值。在 BEFORE 和 AFTER 触发器中可以引用 OLD 和 NEW 行。REFERENCING NEW 子句允许在插入或更新操作发生之前在 BEFORE 触发器中修改新行。

REFERENCING REMOTE 子句用于 SQL Remote。它允许引用 UPDATE 语句的 VERIFY 子句中的值。它仅能用于 RESOLVE UPDATE 或 RESOLVE UPDATE OF column-list 触发器。

WHEN 子句    触发器仅对搜索条件计算为真值的行触发。WHEN 子句仅能用于行级触发器。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP