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. Objective-c——UI基础开发第六天(UITableView)

    一.UITableView的简单使用 显示要素: 1.显示多少给区组 2.显示多少行数据 3.每行显示什么内容 代理不会提醒你有什么方法没调用,但是UITableViewDataSource会 1)用 ...

  2. HDU-5783 Divide the Sequence(贪心)

    题目大意:给一个整数序列,将其划分成若干个子连续序列,使其每个子序列的前缀和不为负.求最大的划分个数. 题目分析:从后往做累加计算,如果不为负,则计数加一,累加和清0.否则,一直往前扫描.如果最终的和 ...

  3. IOS中如果使用RGB实现背景色

    在开发的过程中.我们往往会碰到图片很多的情况.这时候我们的程序打包就会变得很大.一些纯色的图片可以用RGB来实现.这样可以减少内存的占用MAC本中有数码测色计这个功能.通过这个我们可以获得图片的RGB ...

  4. kuangbin_ShortPath E (POJ 1860)

    第一次做判环 然后RE了五次 死在了奇怪的点 memset(vis, 0, sizeof dis); memset(dis, 0, sizeof vis); 什么鬼?? 什么鬼?? 其实代码本身还是不 ...

  5. 让图片完全显示出来,应对overflow,以及在背景中完全显示出来

    1.应对overflow <script type="text/javascript"> $('.foo img').css('width','100%');//修正, ...

  6. BEA-WEBLOGIC ---http://www.beansoft.biz/weblogic/docs92/index.html

    WebLogic Home      英文对照      发行信息 站点地图 Installation Guide 新增功能 已知和已解决的问题 Upgrade Guide Installing Ma ...

  7. ArrayList、linklist、list的区别

    List是一个接口,ArrayList和LinkedList是两个实现类,他们实现的方式不一样,其实LinkedList才是真正的链表(如果不清楚什么是链表,需要了解一下相关数据结构的知识,这不是一两 ...

  8. win10 phpStudy 80端口被占用

    原因是win8下系统默认占用80端口,导致apache无法打开.解决方法: 1.以管理员权限运行c:windowssystem32cmd.exe :2.C:WINDOWSsystem32>net ...

  9. python input() 与 raw_input()

    使用input和raw_input都可以读取控制台的输入,但是input和raw_input在处理数字时是有区别的 当输入为纯数字时: input返回的是数值类型,如int,floatraw_inpo ...

  10. python图像识别--验证码

    1.pip3 install pyocr 2.pip3 install pillow or easy_install Pillow 3.安装tesseract-ocr:http://jaist.dl. ...