插入记录创建触发器

xiaoxiao2021-02-28  64

--创建触发器; create or replace trigger FE44201B_EnquirySummary   after insert on FE44201B FOR EACH ROW --说明创建的是行级触发器 declare PRAGMA AUTONOMOUS_TRANSACTION;--自治事务  V_OUTERRCODE VARCHAR2(200);  V_OUTERRMSG  VARCHAR2(400); begin  -- DBMS_OUTPUT.PUT_LINE(:new.qtukid);  --INSERT INTO crpdta.fe441001 (acukid,aclitm) values (:new.qtukid,'1');   --arehoueInOut(:new.qtukid,:new.qtdate01,:new.qtdate02,:new.qtan8,:new.qtmcu,:new.qtmcu2,:new.qtsrp1,:new.qtsrp2,:new.qtsrp3,:new.qtdcto,:new.qtev01,V_OUTERRCODE,V_OUTERRMSG);    PE44201_EnquirySummary(:NEW.QTUKID,:NEW.QTDRQJ,:NEW.QTRP11,:NEW.QTAC25,:NEW.QTSRP1,V_OUTERRCODE,V_OUTERRMSG);    commit; end FE44201B_EnquirySummary; -------------------------------------------------------------- 调用存储过程: CREATE OR REPLACE PROCEDURE PE44201_EnquirySummary(V_UKID    NUMBER,       -- 唯一编号                                            V_DRQJ    NUMBER,      --日期                                            V_RP11    VARCHAR2,    -- 区域                                            V_AC25    VARCHAR2,    -- 门店分类                                            V_SRP1    VARCHAR2,    -- 项目大类                                            V_OUTERRCODE OUT VARCHAR2, --错误代码(0:代表正确;负数:出错)                                            V_OUTERRMSG  OUT VARCHAR2  --错误信息                                            )IS PRAGMA AUTONOMOUS_TRANSACTION;     V_SQL      VARCHAR2(4000);     V_TEMP1    VARCHAR2(500);     V_TEMP2    VARCHAR2(500);     V_ESUKID   NUMBER; BEGIN      IF V_UKID >100 THEN        V_ESUKID := V_UKID - 100;        DELETE FROM FE44201A WHERE ESUKID < V_ESUKID;      END IF;            V_TEMP1 :='';      V_TEMP2 :='';            IF TRIM(V_AC25)>' ' THEN        V_TEMP1 :=', F0101';        V_TEMP2 := V_TEMP2 ||'AND SDAN8 = ABAN8 AND ABAC25 = '''||V_AC25||'''  ';      END IF;            IF TRIM(V_SRP1)>' ' THEN        V_TEMP2 := V_TEMP2 ||'AND IMSRP1 =  '''||V_SRP1||'''  ';      END IF;        V_SQL := 'INSERT INTO FE44201A (ESUKID,ESDRQJ,ESMCU,ESITM,ESUORG,ESUOR2,ESUOR3,ESUORD,ESSOQS,ESUOM,ESPRP7) '      --要货数量 SF单      ||'SELECT  '||V_UKID||','||V_DRQJ||',A.SDMCU,A.SDITM,SFUORG,S5UORG,(NVL(SFUORG,0)+NVL(S5UORG,0)+NVL(SHUORG,0)) UOR3, 0 ESUORD ,SOQS,A.IMUOM1,IBPRP7 FROM '      ||'(SELECT SDMCU, SDITM, IMUOM1, SFUORG ,IBPRP7 '         ||'FROM (SELECT SDMCU, SDITM, IMUOM1, SUM(SFUORG) SFUORG '                ||'FROM (SELECT SDMCU,SDITM,IMUOM1,CASE WHEN SDUOM <> IMUOM1 THEN SFUORG * UMCNV1 / 10000000 ELSE SFUORG END SFUORG '                           ||'FROM (SELECT SDMCU, SDITM, SDUOM, IMUOM1, SUM(SDUORG) SFUORG '                                   ||'FROM F4211, F0006, F4101 '||V_TEMP1||' '                                   ||'WHERE SDITM = IMITM AND SDLTTR < 980 AND SDDRQJ = '||V_DRQJ||' AND SDMCU = MCMCU  AND MCRP11 = '''||V_RP11||''' '                                   ||'AND SDDCTO = ''SF''  '||V_TEMP2||' AND SDUORG <> 0 '                                  ||'GROUP BY SDMCU, SDITM, SDUOM, IMUOM1 '                                  ||'ORDER BY SDMCU, SDITM, SDUOM, IMUOM1) U1 '                           ||'LEFT JOIN F41002 ON SDITM = UMITM AND SDUOM = UMUM AND IMUOM1 = UMRUM ) '                  ||'GROUP BY SDMCU, SDITM, IMUOM1) U2 '           ||'LEFT JOIN F4102 ON SDMCU = IBMCU AND SDITM = IBITM ORDER BY SDMCU, IBPRP7, SDITM) A LEFT JOIN ('        --补货数量 S5单       ||'SELECT SDMCU, SDITM, IMUOM1, S5UORG '         ||'FROM (SELECT SDMCU, SDITM, IMUOM1, SUM(S5UORG) S5UORG '                 ||'FROM (SELECT SDMCU,SDITM,IMUOM1,CASE WHEN SDUOM <> IMUOM1 THEN S5UORG * UMCNV1 / 10000000 ELSE S5UORG END S5UORG '                         ||'FROM (SELECT SDMCU, SDITM, SDUOM, IMUOM1, SUM(SDUORG) S5UORG '                                 ||'FROM F4211, F0006, F4101 '||V_TEMP1||' '                                ||'WHERE SDITM = IMITM AND SDLTTR < 980 AND SDDRQJ = '||V_DRQJ||' AND SDMCU = MCMCU AND MCRP11 = '''||V_RP11||''' '                                  ||'AND SDDCTO = ''S5''  '||V_TEMP2||' AND SDUORG <> 0 '                                ||'GROUP BY SDMCU, SDITM, SDUOM, IMUOM1 '                                ||'ORDER BY SDMCU, SDITM, SDUOM, IMUOM1) U1 '                         ||'LEFT JOIN F41002 ON SDITM = UMITM AND SDUOM = UMUM AND IMUOM1 = UMRUM) '                ||'GROUP BY SDMCU, SDITM, IMUOM1) U2 '         ||'LEFT JOIN F4102 ON SDMCU = IBMCU AND SDITM = IBITM '        ||'ORDER BY SDMCU, IBPRP7, SDITM ) B ON A.SDITM=B.SDITM AND A.SDMCU=B.SDMCU LEFT JOIN ('        --直送要货数量 Sh单        ||'SELECT SDMCU, SDITM, IMUOM1, SHUORG '         ||'FROM (SELECT SDMCU, SDITM, IMUOM1, SUM(SHUORG) SHUORG '                 ||'FROM (SELECT SDMCU,SDITM,IMUOM1,CASE WHEN SDUOM <> IMUOM1 THEN SHUORG * UMCNV1 / 10000000 ELSE SHUORG END SHUORG '                         ||'FROM (SELECT SDMCU, SDITM, SDUOM, IMUOM1, SUM(SDUORG) SHUORG '                                 ||'FROM F4211, F0006, F4101 '||V_TEMP1||' '                                ||'WHERE SDITM = IMITM AND SDLTTR < 980 AND SDDRQJ = '||V_DRQJ||' AND SDMCU = MCMCU AND MCRP11 = '''||V_RP11||''' '                                  ||'AND SDDCTO = ''SH''  '||V_TEMP2||' AND SDUORG <> 0 '                                ||'GROUP BY SDMCU, SDITM, SDUOM, IMUOM1 '                                ||'ORDER BY SDMCU, SDITM, SDUOM, IMUOM1) U1 '                         ||'LEFT JOIN F41002 ON SDITM = UMITM AND SDUOM = UMUM AND IMUOM1 = UMRUM) '                ||'GROUP BY SDMCU, SDITM, IMUOM1) U2 '         ||'LEFT JOIN F4102 ON SDMCU = IBMCU AND SDITM = IBITM '        ||'ORDER BY SDMCU, IBPRP7, SDITM  ) C ON A.SDITM=C.SDITM AND A.SDMCU=C.SDMCU LEFT JOIN ('        --数量合计        ||'SELECT SDMCU, SDITM, IMUOM1, SOQS '           ||'FROM (SELECT SDMCU, SDITM, IMUOM1, SUM(SOQS) SOQS '                   ||'FROM (SELECT SDMCU,SDITM,IMUOM1,CASE WHEN SDUOM <> IMUOM1 THEN SOQS * UMCNV1 / 10000000 ELSE SOQS END SOQS '                           ||'FROM (SELECT SDMCU, SDITM, SDUOM, IMUOM1, SUM(SDUORG) SOQS '                                   ||'FROM F4211, F0006, F4101 '||V_TEMP1||' '                                  ||'WHERE SDITM = IMITM AND SDLTTR < 980 AND SDDRQJ = '||V_DRQJ||' AND SDMCU = MCMCU AND SDDCTO IN (''S5'',''SF'', ''SH'') '                                    ||'AND MCRP11 ='''||V_RP11||'''  '||V_TEMP2||' AND SDCOMM = ''C'' AND SDUORG <> 0 '                                  ||'GROUP BY SDMCU, SDITM, SDUOM, IMUOM1 '                                  ||'ORDER BY SDMCU, SDITM, SDUOM, IMUOM1) U1 '                           ||'LEFT JOIN F41002 ON SDITM = UMITM AND SDUOM = UMUM AND IMUOM1 = UMRUM) '                  ||'GROUP BY SDMCU, SDITM, IMUOM1) U2 '           ||'LEFT JOIN F4102 ON SDMCU = IBMCU AND SDITM = IBITM ORDER BY SDMCU, IBPRP7, SDITM ) D ON A.SDITM=D.SDITM AND A.SDMCU=D.SDMCU ';     dbms_output.put_line(V_SQL);     execute immediate V_SQL;      commit;     UPDATE  FE44201A SET ESLITM =(SELECT IMLITM FROM  F4101 WHERE IMITM=ESITM);     UPDATE  FE44201A SET ESDC = (SELECT MCDC FROM  F0006 WHERE ESMCU=MCMCU);     UPDATE  FE44201A SET (ESDSC1,ESDSC2) = (SELECT IMDSC1,IMDSC2 FROM  F4101 WHERE IMITM=ESITM);     commit;         EXCEPTION    WHEN OTHERS THEN       ROLLBACK;       V_OUTERRCODE := SQLCODE;      V_OUTERRMSG  := SUBSTR(SQLERRM, 1, 255); END PE44201_EnquirySummary;
转载请注明原文地址: https://www.6miu.com/read-2613820.html

最新回复(0)