CREATE OR REPLACE TRIGGER WoStateChange AFTER UPDATE on csdbuser.T_PD_WorkOrder
for each row declare
para_PlanState csdbuser.t_pd_plan.planstate%type;
para_WoRunCnt int;
BEGIN
--计划状态
select PlanState into para_PlanState from T_PD_Plan where PlanID=:new.planid; --1 工单: 锁定1 -> 下载完毕2
if(:old.wostate='1' and :new.wostate='2') then
if(para_PlanState='1') then
--计划状态由 制定1 变为 下载3
update T_PD_Plan SET PlanState='3' where PlanID=:new.planid;
end if;
--2 工单: 下载完毕2 -> 执行3
elsif (:old.wostate='2' and :new.wostate='3') then
if(para_PlanState='3') then
--计划状态由 下载3 变为 执行4
update T_PD_Plan SET PlanState='4',FactStartTime=sysdate where PlanID=:new.planid;
end if;
--3 工单: 执行3 -> 完成4
elsif (:old.wostate='3' and :new.wostate='4') then
select COUNT(*) into para_WoRunCnt from T_PD_WorkOrder where PlanID=:new.planid and (WOState='1' or WOState='2' or WOState='3');
--计划状态由 执行4 变为 完成5
if(para_PlanState='4' and para_WoRunCnt=0) then
update T_PD_Plan SET PlanState='5',FactEndTime=sysdate where PlanID=:new.planid;
end if;
--4 工单: 锁定1或下载完成2 -> 废弃5
elsif((:old.wostate='1' or :old.wostate='2') and :new.wostate='5') then
select COUNT(*) into para_WoRunCnt from T_PD_WorkOrder where PlanID=:new.planid and (WOState='1' or WOState='2' or WOState='3');
if(para_PlanState='4' and para_WoRunCnt=0) then
--计划状态由 执行4 变为 完成5
update T_PD_Plan SET PlanState='5',FactEndTime=sysdate where PlanID=:new.planid;
end if;
--5 工单: 下载完成2 -> 锁定1
elsif(:old.wostate='2' and :new.wostate='1') then
--获取工单 执行 或 完成 的数量
select COUNT(*) into para_WoRunCnt from T_PD_WorkOrder where PlanID=:new.planid and (WOState='3' or WOState='4');
if(para_WoRunCnt=0) then
--计划没有对应执行或完成的工单,清空计划开始和结束时间
update T_PD_Plan SET PlanState='3',FactStartTime=null,FactEndTime=null where PlanID=:new.planid;
end if;
--获取工单 执行 或 完成 的数量
select COUNT(*) into para_WoRunCnt from T_PD_WorkOrder where PlanID=:new.planid and (WOState='3' or WOState='4' or WOState='2');
if(para_WoRunCnt=0) then
--没有 下载完毕2,运行3,完成4 的工单,计划变为 制定1状态
update T_PD_Plan SET PlanState='1' where PlanID=:new.planid;
end if;
end if;
END WoStateChange;

  

一个Oracle触发器的示例的更多相关文章

  1. 一个SQLSERVER触发器的示例

    CREATE TRIGGER WoStateChange on T_PD_WorkOrder AFTER UPDATE AS BEGIN declare @WorkOrderID varchar(20 ...

  2. 问题:Oracle出发器;结果:1、Oracle触发器详解,2、Oracle触发器示例

    ORACLE触发器详解 本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创 ...

  3. 一个非常标准的Java连接Oracle数据库的示例代码

    最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择“D:\Oracle\app\ ...

  4. Oracle触发器原理、创建、修改、删除

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  5. oracle 触发器学习

    触发器使用教程和命名规范 目  录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...

  6. Oracle触发器实例(网搜)

    触发器使用教程和命名规范 目  录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...

  7. Oracle 触发器在日志管理开发中的应用

    摘要: 本文讨论了利用数据库中的触发器对日志管理进行设计与实现的方法, 是对原来在客户端软件中编写日志管理方法的一种改进, 并给出了 Oracle9i 中的实例演示.关键词: Oracle; 触发器; ...

  8. ORACLE触发器的管理与实际应用【weber出品】

    一.INSTEAD OF触发器 对于简单的视图可以执行INSERT,UPDATE和DELETE操作,但是对于复杂视图,不允许直接执行INSERT,UPDATE,DELETE操作,当视图出现以下任何一种 ...

  9. oracle 触发器的实例(转)

    触发器使用教程和命名规范 目  录 目录 触发器使用教程和命名规范 1 1,触发器简介 1 2,触发器示例 2 3,触发器语法和功能 3 4,例一:行级触发器之一 4 5,例二:行级触发器之二 4 6 ...

随机推荐

  1. break、continue与return见的区别

    比较简单的说法就是: 1.break:跳出当前的循环体 2.continue:跳出本次的循环 3.return:返回调用函数(也就完全的跳出了函数块) 好,下面就是我的代码练习君了: package ...

  2. Qt 串口学习3

    1.怎样将选择波特率 1)使用if else 的方法     if(ui->BaudRate->currentText()==tr("9600"))   //根据组合框 ...

  3. 关于Toad连接DB2的sqlstate=08001错误

    新装的centos6.3+db29.7,数据库导入完了的之后用Toad连接访问之的时候出错了. DB2 Database Error: ERROR [08001] [IBM] SQL30081N A ...

  4. POJ 3928 Ping pong(树状数组)

                                                                          Ping pong Time Limit: 1000MS   ...

  5. HDU-4614 Vases and Flowers (线段树区间更新)

    题目大意:有n个花瓶,每个花瓶中只能放一朵花.两种操作,一种是从A开始放F朵花,如果有的花瓶中已经有花则跳过这个花瓶,往下一个花瓶放:第二种是将区间[A,B]之间花瓶中的花清空.如果是第一种操作,输出 ...

  6. 打开eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素。

    [错误] 打开eclipse报错:发现了以元素 ‘d:skin’ 开头的无效内容.此处不应含有子元素. [具体报错信息] Error parsing D:\Android-sdks\system-im ...

  7. (转) TensorFlow深度学习,一篇文章就够了

    TensorFlow深度学习,一篇文章就够了 2016/09/22 · IT技术 · TensorFlow, 深度学习 分享到:6   原文出处: 我爱计算机 (@tobe迪豪 )    作者: 陈迪 ...

  8. Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)

    1. Mesos简介 1.1 Mesos Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理. Mesos主要由以下几部分组成: Master: 管理各Slave节点 S ...

  9. oracle闪回使用以及删除存储过程恢复

    oracle恢复删除的数据  恢复删除的存储过程 SELECT * FROM dba_source as of timestamp (systimestamp -interval'600'second ...

  10. snort使用

    http://jingyan.baidu.com/article/d8072ac45a626fec95cefd85.html 接上篇,如果编译安装snort并指定了prefix,那么须指定一个软链接, ...