• 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;
  • 相关阅读:
    ExcelDataReader read excel file
    DocumentFormat.OpenXml read excel file
    java高并发系列
    java高并发系列
    java高并发系列
    java高并发系列
    java高并发系列
    java高并发系列
    java高并发系列
    java高并发系列
  • 原文地址:https://www.cnblogs.com/xhu218/p/4288633.html
Copyright © 2020-2023  润新知