zoukankan      html  css  js  c++  java
  • Oracle 触发器 删除操作时再查询本表数据 功能不正确

    背影如下:

    表名,WFGTEST

    1 create table WFGTEST
    2 (
    3   NAME1    VARCHAR2(256) not null,
    4   NAME2    VARCHAR2(256),
    5   CAPACITY NUMBER(20,3)
    6 )

    表结构如下:

    NAME1NAME2CAPACITY
    wfg wfg 1.000
    qq qq 1.000
    lxx lxx 2.000
    wly wly 2.000

    现在想实现的效果如下:

    如果这个表里相同的CAPACITY都被删除完时,向另一个表里插入一个计数,

    如1.000被全部删除完时,向另一个表里插入记录如下,也就是说DELETE时,需要再查询本表是否还有与此次删除相同的CAPACITY,如果没有,那么就向另一个表里添加记录

    CAPACITYTYPE DELETETIME
    1.000   2015/02/13

    那么这个触发器应该怎么写呢?

     1 CREATE OR REPLACE TRIGGER "TRIGGER_WFGTEST" AFTER
     2 DELETE ON "WFGTEST" FOR EACH ROW 
     3 DECLARE nRMSFLAG number;
     4 nFindSelft number;
     5 
     6 pragma autonomous_transaction;
     7 
     8 BEGIN
     9   ---------------------------------------------------------------------------------
    10     IF DELETING  THEN
    11        SELECT COUNT(*) INTO nFindSelft FROM WFGTEST WHERE CAPACITY =:OLD.CAPACITY;
    12        IF nFindSelft =1 THEN
    13                INSERT INTO "WFGTEST2" VALUES(:OLD.NAME2,sysdate);
    14             END IF;    
    15           commit;
    16        END IF;
    17        
    18     END IF;
    19    ----------------------------------------------------------------------------------
    20    --END IF;
    21  /* PLEASE CHANGE THE NAME*/
    22 END TRIGGER_WFGTEST;

    下面有两个SQL代码测试,有不明白的地方请高手指导:

    1 --这样执行的话,无法统计
    2 delete from wfgtest where capacity = 1.000;
    3 commit;
    4 
    5 --这样执行就能统计,请问为什么?
    6 delete from wfgtest where name1 = 'wfg';
    7 delete from wfgtest where name1 = 'qq';
    8 commit;
  • 相关阅读:
    组合数学+结论——cf1359E
    【模拟】分类讨论大模拟+数论——cf1358F
    【思维】前缀和——cf1358E
    Android基础—— 自定义RecyclerView内部控件的监听器
    【思维】模拟+暴力——icpc nwrrc 2019 K
    分治模板
    树上问题&图论模板整理
    数据结构模板整理
    一些计数题
    Codeforces Round #567 (Div. 2)
  • 原文地址:https://www.cnblogs.com/xhu218/p/4288633.html
Copyright © 2011-2022 走看看