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

自己写的第一个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,然后重启即可 作用.快速搜索项目中的方法

    adc_trigger_nuvotonadc_

    例如,若要读取通道0的电压,只需将`ADC_CHSEL`的第0位置1。 3. **启动转换**:在选择了合适的通道后,通过写入`ADC_CR`寄存器的启动转换位来开始ADC转换。如果配置为单次转换模式,转换完成后,此位会自动清零;在...

    One Source Meter_trigger_trigger_labview_

    标题 "One Source Meter_trigger_trigger_labview_" 暗示了这是一个与LabVIEW相关的项目,具体是为Kethely 26xx系列仪器设计的一个触发功能模块。LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是...

    MaRsi-Trigger - MetaTrader 5脚本.zip

    "MaRsi-Trigger"就是这样一个专为MT5设计的独特交易脚本,它结合了移动平均线和相对强弱指数(RSI)的概念,以帮助交易者更好地理解和预测市场动态。 "MaRsi-Trigger"的核心在于其三个状态的识别能力:上升、下降和...

    jQuery.event.trigger()的简单解释

    这个函数接受两个参数,第一个是要触发的事件名称,第二个是一个可选的数组,包含了传递给事件处理程序的额外参数。 下面,我们来看一个使用jQuery.event.trigger()函数触发自定义事件的例子。首先,我们通过$...

    分布式云数据库复合Trigger新机制.pdf

    分布式云数据库复合Trigger新机制是针对现代大数据环境下,如何高效地管理和同步分布式系统中的数据而提出的一种创新方法。传统的数据管理主要集中在应用程序内部的缓存更新,但随着大数据的广泛应用,这种局限性变...

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

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

    springTrigger 触发器

    Spring Trigger是Spring框架的一部分,主要用于实现定时任务调度。在Java项目中,我们常常需要执行一些周期性的任务,比如数据同步、日志清理等,这时Spring Trigger就发挥了关键作用。它基于Quartz Scheduler库,...

    在DB2中创建第一个触发器

    在DB2中创建触发器是数据库管理中的一个重要环节,它允许在特定的数据库操作(如INSERT、UPDATE或DELETE)执行之前或之后自动运行预定义的SQL语句。本文将详细介绍如何在DB2数据库中创建一个触发器,以及触发器的...

    jQuery如何使用自动触发事件trigger

    在这个场景下,当我们想在页面加载完毕后自动显示第一个链接对应的效果时,这种方法非常适用。 除了触发标准的浏览器事件之外,trigger()还可以用来触发自定义事件。jQuery允许我们通过bind()方法来绑定一个自定义...

    使用trigger方式实现不用点击file类型的input弹出文件选择对话框

    第一种是通过编写自定义的trigger函数来模拟点击事件。示例代码中,定义了一个trigger函数,该函数接受两个参数:ele(事件的目标元素)和event(要触发的事件类型)。这个函数通过调用ele上的事件监听函数来模拟...

    jQuery中值得注意的trigger方法浅析

    在jQuery库中,`trigger`方法是一个非常实用的工具,它允许开发者在DOM元素上模拟各种事件,使得代码更加简洁高效。本文将深入探讨`trigger`方法的核心功能、常见用法以及如何与其他jQuery方法结合使用。 `trigger`...

    51单片机EEPROM的读写.docx

    例如,在地址 0x21f0 处第 1 次写 11010110,第 2 次写 111010,读出结果是这两个值的相与 10010。 因此,如果一个地址处的值不是 0xFF 时写入新的数据是不对的,需要先执行扇区擦除,变为 0xFF。对于单个字节的...

    同步一个表的步凑1

    首先,我们来看第一步:创建一个Channel。在SymmetricDS中,`Channel`是一个逻辑概念,它代表了一个数据同步的流程,可以包含一个或多个希望在一个事务中同步的表。创建Channel的SQL语句如下: ```sql INSERT INTO ...

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

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

    数据库之—用触发器实现每个学生最多只能选择3门课程

    例如,尝试为一个学生添加第四门课程,此时触发器应该阻止这种操作,并返回错误消息:“操作错误:每个学生最多只能选择3门课程!”如果一切正常,则证明触发器已经正确地发挥了作用。 ### 五、注意事项 - 在实际...

    wpf之loading加载动画

    1. 在XAML中定义一个形状元素(如Ellipse),并为其添加一个旋转变换。 2. 创建一个Storyboard,定义形状元素的旋转动画,设置适当的持续时间和重复次数。 3. 使用EventTrigger或其他触发器来启动和停止动画,比如在...

    2_第一个实例_EN1

    在这个例子中,我们将构建一个简单的对话系统,用于指导机器人执行四个基本动作:左、右、前、后。当机器人不确定用户的指令时,它会请求用户重复指令。通过使用概率规则,我们可以直观地设计这样一个对话系统。 ...

    quartz开元框架的使用步骤

    在这个示例中,Trigger 将每隔 1 秒钟执行一次。 Cron 表达式 Cron 表达式是一个字符串,用于指定 Trigger 的执行频率。Cron 表达式的格式为:秒 分 时 日 月 周 年(可选)。下面是 Cron 表达式的格式说明: * ...

Global site tag (gtag.js) - Google Analytics