一个Oracle触发器的示例
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触发器的示例的更多相关文章
- 一个SQLSERVER触发器的示例
CREATE TRIGGER WoStateChange on T_PD_WorkOrder AFTER UPDATE AS BEGIN declare @WorkOrderID varchar(20 ...
- 问题: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 创 ...
- 一个非常标准的Java连接Oracle数据库的示例代码
最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择“D:\Oracle\app\ ...
- Oracle触发器原理、创建、修改、删除
本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...
- oracle 触发器学习
触发器使用教程和命名规范 目 录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...
- Oracle触发器实例(网搜)
触发器使用教程和命名规范 目 录触发器使用教程和命名规范 11,触发器简介 12,触发器示例 23,触发器语法和功能 34,例一:行级触发器之一 45,例二:行级触发器之二 46,例三:INSTEA ...
- Oracle 触发器在日志管理开发中的应用
摘要: 本文讨论了利用数据库中的触发器对日志管理进行设计与实现的方法, 是对原来在客户端软件中编写日志管理方法的一种改进, 并给出了 Oracle9i 中的实例演示.关键词: Oracle; 触发器; ...
- ORACLE触发器的管理与实际应用【weber出品】
一.INSTEAD OF触发器 对于简单的视图可以执行INSERT,UPDATE和DELETE操作,但是对于复杂视图,不允许直接执行INSERT,UPDATE,DELETE操作,当视图出现以下任何一种 ...
- oracle 触发器的实例(转)
触发器使用教程和命名规范 目 录 目录 触发器使用教程和命名规范 1 1,触发器简介 1 2,触发器示例 2 3,触发器语法和功能 3 4,例一:行级触发器之一 4 5,例二:行级触发器之二 4 6 ...
随机推荐
- 阅读《构建之法》第八、九、十章有感和Sprint总结
1.阅读<构建之法>读后感 第八章:需求分析 需求分析,我觉得需求分析挺重要的,一个需求分析是指对要解决的问题进行详细的分析,弄清楚问题的要求,包括需要输入什么数据,要得到什么结果,最后应 ...
- Dialog样式
<style name="load_dialog" parent="@android:style/Theme.Dialog"> <item n ...
- ros与下位机通信常用的c++ boost串口应用--22
摘要: 原创博客:转载请表明出处:http://www.cnblogs.com/zxouxuewei/ 一.首先移植c++ boost 库: 1. 先去 Boost官网 下载最新的Boost版本, 我 ...
- c#部分---输入班级人数,输入语文数学英语成绩,打印语文前两名,数学后两名,英语平均分
1.开始收集输入项 2.用冒泡排序,统计语文成绩,并附带把语数英三门课全排列 3.数学成绩排序,附带把三门课全排序‘ 4.最后算英语的平均分:
- 【BZOJ2013】【JSOI2008】球形空间产生器
看chty代码 原题: BZOJ挂了--等好了补上题面 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球面上n+1个点的坐标,你需要以最快的速度确定这 ...
- URL 正则表达式
(http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? From h ...
- gprof使用介绍
gprof 1.1 简介 gprof实际上只是一个用于读取profile结果文件的工具.gprof采用混合方法来收集程序的统计信息,他使用检测方法,在编译过程中在函数入口处插入计数器用于收集 ...
- 运用cookie登陆人人网爬取数据
浏览器访问WEB服务器的过程 在用户访问网页时,不论是通过URL输入域名或IP,还是点击链接,浏览器向WEB服务器发出了一个HTTP请求(Http Request),WEB服务器接收到客户端浏览器的请 ...
- iOS 下拉刷新和加载更多 (OC\Swift)
Swift语言出来之后, 可能还没有第三方的下拉刷新和上提加载, 所以自己用UIRefreshControl控件和UITableView实例的tableFooterView(底部视图)属性结合起来写了 ...
- xml学习笔记一(概述)
XML 被设计用来传输和存储数据. HTML 被设计用来显示数据. 什么是 XML? XML 指可扩展标记语言(EXtensible Markup Language) XML 是一种标记语言,很类似 ...