`
bibiye
  • 浏览: 169226 次
社区版块
存档分类
最新评论

自己写的第一个triger

SQL 
阅读更多
简化前: 
sql 代码
  1. Create Or Replace Trigger tr_cust_order   
  2. AFTER  UPDATE  
  3. ON te_cust_order   
  4. FOR EACH ROW   
  5. WHEN (NEW.status=6)   
  6. DECLARE    
  7.    exhok NUMBER;   
  8.    exhid NUMBER;   
  9.    regok NUMBER;   
  10.    seqexh NUMBER;   
  11.    sql_stat varchar2(200);   
  12. BEGIN  
  13.      
  14. --判断是否为展览订单             
  15. DECLARE    
  16.     CURSOR emp_cursor IS  
  17.         SELECT service_item_id FROM te_cust_order    
  18.     WHERE service_item_id IN  
  19.     (SELECT t.id FROM te_cust_service_item t WHERE t.service_type_id IN (2,3,4) );   
  20.     emp_record emp_cursor%ROWTYPE;   
  21. BEGIN  
  22.     OPEN emp_cursor;   
  23.     LOOP   
  24.         FETCH emp_cursor INTO emp_record;   
  25.         exit when emp_cursor%NOTFOUND;   
  26.     if emp_record.service_item_id = :old.SERVICE_ITEM_ID then  
  27.            exhok := 1;     
  28.     end if;     
  29.     END LOOP;   
  30.     CLOSE emp_cursor;   
  31. END;   
  32.   
  33. if exhok != 1 then     
  34. return;   
  35. end if;   
  36.   
  37. --取得展览ID   
  38. exhid := 0;   
  39. DECLARE    
  40.     CURSOR exh_cursor IS  
  41.         SELECT exh_id FROM te_exh_order    
  42.     WHERE order_no = :new.order_no;   
  43.     exh_record exh_cursor%ROWTYPE;   
  44. BEGIN  
  45.     OPEN exh_cursor;   
  46.     LOOP   
  47.         FETCH exh_cursor INTO exh_record;   
  48.         exit when exh_cursor%NOTFOUND;   
  49.     exhid := exh_record.exh_id ;   
  50.     END LOOP;   
  51.     CLOSE exh_cursor;   
  52. END;   
  53.   
  54. if exhid < 1 then     
  55. return;   
  56. end if;   
  57.   
  58. --判断是否已经报名了   
  59. regok := 0;   
  60. SELECT count(*) INTO regok FROM teexhibitiontomember    
  61.  WHERE EXHIBITIONID =  exhid and CUSTOMERNO = :new.CUSTOMER_NO;   
  62. if regok >0 then     
  63. return;   
  64. end if;   
  65.   
  66. --增加报名记录   
  67. select teexhibitionmemberseq.nextval into seqexh    
  68. from teexhibitiontomember t where rownum = 1;   
  69.   
  70. sql_stat := 'insert into teexhibitiontomember(ID,MEMBERID,EXHIBITIONID,CUSTOMERNO) values ('   
  71.           || seqexh || ',0,' ||exhid||','''|| :new.CUSTOMER_NO||''')';   
  72.              
  73. execute immediate sql_stat;   
  74.   
  75.   
  76. END tr_cust_order;   
 
简化后:
sql 代码
  1. /*==============================================================*/   
  2. /* Trigger: tr_cust_order                               */   
  3. /*==============================================================*/   
  4.   
  5. Create Or Replace Trigger tr_cust_order   
  6.   AFTER UPDATE ON te_cust_order   
  7.   FOR EACH ROW   
  8.   WHEN (NEW.status = 6)   
  9. DECLARE  
  10.   exhid    NUMBER;   
  11.   regok    NUMBER;   
  12.   seqexh   NUMBER;   
  13.   sql_stat varchar2(200);   
  14. BEGIN  
  15.   
  16.   --取得展览ID   
  17.   SELECT exh_id   
  18.     into exhid   
  19.     FROM te_exh_order   
  20.    WHERE order_no = :new.order_no;   
  21.   
  22.   if exhid < 1 then  
  23.     return;   
  24.   end if;   
  25.   
  26.   --判断是否已经报名了   
  27.   regok := 0;   
  28.   SELECT count(*)   
  29.     INTO regok   
  30.     FROM teexhibitiontomember   
  31.    WHERE EXHIBITIONID = exhid   
  32.      and CUSTOMERNO = :new.CUSTOMER_NO;   
  33.   if regok > 0 then  
  34.     return;   
  35.   end if;   
  36.   
  37.   --增加报名记录   
  38.   select teexhibitionmemberseq.nextval into seqexh from dual;   
  39.   
  40.   sql_stat := 'insert into teexhibitiontomember(ID,MEMBERID,EXHIBITIONID,CUSTOMERNO) values (' ||   
  41.               seqexh || ',0,' || exhid || ',''' || :new.CUSTOMER_NO ||   
  42.               ''')';   
  43.   
  44.   execute immediate sql_stat;   
  45.   
  46. END tr_cust_order;   
分享到:
评论

相关推荐

    eclipse 代码修复 trigger.epf

    快速搜素代码文件 第一.将此文件导入eclipse,然后重启即可 作用.快速搜索项目中的方法

    oracle trigger(1)

    上传两本Oracle的trigger的学习资料(本人的学习参考书)。 详解Oracle中的trigger(中文版,PDF格式),包括DML触发器,替代触发器,系统触发器以及变异表等,含代码。 确实是本Oracle trigger的好书。...这是第一本。

    Oracle触发器trigger详解

    触发器的概念和第一个触发器 数据库触发器是一个与表相关联的,存储的PL/SQL 语句。 每当一个特定的数据操作语句(insert update delete)在指定的表上发出时,Oracle自动执行触发器中定义的语句序列。 举个简单的...

    mysqltrigger触发器.pdf

    的行,在专我学家会习那从之样每前与一也您个许进细大行节家对开会话始认,慢为用这简的个单为用的大例问家很题建难、,立例新但概子特是念让性,只你丛最要学书后跟到的会着需第给课要一大程的集家去知。...

    trigger-1:一个简单但功能强大的事件系统

    扳机 一个简单但功能强大的事件系统。 特征 有据可查。 零依赖。 简单而强大(所有的想法,没有膨胀)。 ...绑定一个新的命名触发器事件。... 您还可以将参数传递给此函数,这些参数可以在回调方法的第一个参数中访问。

    在DB2中创建第一个触发器

    在DB2中创建第一个触发器

    Quartz-Job-Scheduling-Framework-中文版-V0.9.1.zip

    第一章. 企业应用中的作业调度 内容提要:什么是作业调度,作业调度为什么说是重要的,企业应用中的作业调度,非企业应用中的作业调度,作业调度与工作流,关于作业调度其他可选择方案 第二章. Quartz 起步 内容...

    Quest3D教程

    第三节:实现第一个可漫游场景与理解Quest3d程序运行规律 第四节:常用编程模块的学习(if、trigger、switch……) 第五节:声音与视频的控制 第六节:在Quest3d中实现动画 第七节:在Quest3d中制作GUI(操作界面) ...

    Oraclet中的触发器

    例1: 建立一个触发器, 当职工表 emp 表被删除一条记录时,把被删除记录写到职工表删除日志表中去。 CREATE TABLE emp_his AS SELECT * FROM EMP WHERE 1=2; CREATE OR REPLACE TRIGGER del_emp BEFORE DELETE ON ...

    sample-trigger-app

    M2X 采样触发应用 这个小的应用程序旨在展示一种在触发数据源触发器时执行操作的简单方法,在这种情况下,通过 API 发送电子邮件... 创建您的第一个 将流添加到您的设备 将触发器添加到您的设备流并将回调 URL 指向您的

    触发快乐:视频游戏与娱乐革命Trigger Happy: Videogames and the Entertainment Revolution

    对当今最流行的游戏形式之一:视频游戏,有史以来第一次具有学术价值和深刻影响的评论。

    circleci-trigger-github-action:触发 circle-ci 作业的 github 动作

    当想要从 CircleCi 迁移到 Github 操作并且您想要逐步执行此操作时(例如,在 github 操作中运行第一个作业,然后触发第二个作业),这会很有用。 默认值适用于大多数情况。 但是org 、 repo和branch也很有用。输入...

    ORACLE 数据库开发_PLSQL基础.doc

    ---- 第一章 PL/SQL 简介 ---- ---- 第二章 PL/SQL程序结构 ---- ---- 第三章 变量与数据类型 ---- ---- 第四章 PL/SQL控制语句 ---- ---- 第五章 PL/SQL游标 ---- ---- 第六章 HANDLE EXCEPTION ---- ---- 第七章...

    photo trigger sunjob:光触发(高速光触发)-开源

    照片小工具、高速照片拍摄... 触发器: - Photo Trigger 1.x(2x555 芯片) - Photoduino 2.x mod - CameraAxe 3.0.0.4 mod - 电子控制器阀门 - 照片同步器(第一次和第二次抽吸) - 照片桥(照片门) Photoduino ...

    jQuery第一次运行页面默认触发点击事件的实例

    例如: 1. $(“#txt”).trigger(“click”);...2. $(“.aaa .bbb”).eq(0)...以上这篇jQuery第一次运行页面默认触发点击事件的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网。

    魔兽rpg编程 脚本 j文件编辑 Jass shop

    可以选择是否从名称第一个字母开始匹配,是否注意大小写,该函数的返回类型或变量、常量的类型。搜索按钮将自动在所有函数/变量常量/类型中查找。按回车或者空格会将当前词汇添加到下拉菜单中。单击其中条目,下面的...

    SQL sever 实训

    --计算有多少种产品(假设为x),然后显示一条信息:共有X种产品 DECLARE @X int SET @X =(SELECT COUNT (*) FROM Product ) PRINT '共有'+convert (char(2),@x)+'种产品。' GO --编写计算n!(n=20)的程序,并...

    ApexTriggerHandler:另一个库实现Apex触发器处理程序设计模式

    只有一个Triggers.cls类及其相应的测试类TriggersTest.cls ,其最小和简单的。版本1.1.3 对重大更改:现在,所有filterChanged()方法都返回List&lt;Id&gt; ,而不是Set&lt;Id&gt; 。 这是因为List具有更广泛的用例,它不仅可以在...

    SQL21日自学通

    你的第一个查询 33 总结 37 问与答 38 校练场 38 练习 39 第三天表达式条件语句与运算 40 第四天函数对数据的进一步处理 60 目标 60 汇总函数 60 COUNT61 SUM 61 AVG 63 MAX 63 MIN 64 VARIANCE65 STDDEV66 日期/...

    VB.NET 进销存系统

    在这个目录下的其它*.sql文件,则是第12章所介绍的Trigger,也就是进销存管理系统这个数据库有使用到的Trigger文件。 4、光盘内所有的范例程序,它们所连上的数据库主机,都是以单机为主。也就是说,应用程序与...

Global site tag (gtag.js) - Google Analytics