创建触发器的基本语法

节选自 http://blog.csdn.net/indexman/article/details/8023740/

CREATE OR REPLACE TRIGGER triger_DESP_to_segmentpoint
AFTER                                 --可以选 BEFORE 或 AFTER ,指触发器在附着表操作的之前还是之后触发
INSERT OR DELETE          --触发事件,可以在 INSERT | DELETE | UPDATE(OF column ...) 中单选或多选,多选只能用OR连接,不能用ADD
ON DESIGNATED_POINT  --附着表,或视图,触发器只能附着在一张表/视图上
FOR EACH ROW                --FOR EACH ROW选项说明触发器为行触发器。还有可以有语句触发器,二者区别是触发次数以行为单位还是语句为单位

--参照当前的新、旧列值,默认的相关名称分别为OLD和NEW。触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号(:),但在WHEN子句中则不能加冒号。
BEGIN                                 
  CASE
       WHEN DELETING THEN          --判断动作类型,可以选择 INSERTING|DELETING|UPDATING [(column_1...)更新指定列时触发]:

                --WHEN 子句说明触发约束条件,WHEN 子句指定的触发约束条件只能用在BEFORE 和AFTER 行触发器中,不能用在INSTEAD OF 行触发器和其它类型的触发器中。
       delete from segment_point where point_uuid = :old.designated_point_uuid;
       WHEN INSERTING THEN
       insert into segment_point (point_uuid) valueS(:new.Designated_Point_Uuid);   --如果是INSERTING,能用:new代表行,而用:old只能返回null值,
  END CASE;
END;

实例1:添加/删除类型triger

CREATE OR REPLACE TRIGGER triger_NAVAID_to_segmentpoint
AFTER INSERT
   OR DELETE
ON NAVAID
FOR EACH ROW
BEGIN
  CASE
           WHEN DELETING THEN
           delete from segment_point where point_uuid = :old.NAVAID_UUID;
           WHEN INSERTING THEN
           insert into segment_point (point_uuid) valueS(:new.NAVAID_UUID);
  END CASE;
END;

实例2、3有条件的添加trigger

--删除触发器Navaid
CREATE OR REPLACE TRIGGER Navaid_to_sgmtpt_del
After
Delete
ON Navaid
For Each Row
Begin
 delete from segment_point where point_uuid = :old.Navaid_uuid;
End;
/
--插入触发器Navaid_ts
CREATE OR REPLACE TRIGGER Navaid_to_sgmtpt_insert
After
Insert
ON Navaid_ts
For Each Row
  when(new.Type_id<=7 and new.interpretation='BASELINE')
Declare v_count Number;
Begin
  select count(*) into v_count from segment_point where point_uuid =:new.Navaid_uuid;
  if v_count=0 then
     insert into segment_point (point_uuid) valueS(:new.Navaid_Uuid);
  end if;
End;
/

转载于:https://www.cnblogs.com/mol1995/p/7955106.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值