Click here to Skip to main content
16,010,427 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
SQL
CREATE OR REPLACE TRIGGER DOTCOM.TRG_CHK
BEFORE INSERT OR UPDATE
ON DOTCOM.SM_SRET_DETAIL REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
CURSOR C2
   IS
   SELECT SD_SRET_QTY_BU,SD_QTY_BU FROM SM_SALES_DETAIL
   WHERE SD_SH_SYS_ID = 7777--SDSYSID
   AND SD_ITEM_CODE   = 'DOTFULL0064'--SDITEMCODE
   AND SD_LOC_CODE    = 'D01'--SDLOCNCODE
   for update of SD_SRET_QTY_BU;

BEGIN

     for rec in c2 loop
                VSD_QTY_BU := rec.SD_QTY_BU;
            VSD_SRET_QTY_BU := rec.SD_SRET_QTY_BU;

                IF   (VSD_QTY_BU - VSD_SRET_QTY_BU) >= 0 THEN
                    UPDATE SM_SALES_DETAIL SET SD_SRET_QTY_BU = SD_SRET_QTY_BU + newval
                WHERE current of c2;

             ELSE
                    RAISE_APPLICATION_ERROR (-20002,' RETURN QUANTITY EXCEEDED SOLD QUANTITY  ' || :NEW.CSRI_ITEM_CODE);



                END IF;
            END LOOP;
 END

When I run this the cursor will return 2 rows, but I want to update both of this row seperately based on a condition QTY_BU and RET_QTY_BU..only this two columns are different for the two rows.
When I try to update it is updating on both the row.
Posted
Updated 21-Nov-10 2:21am
v2

1 solution

You currently have this line in your code
SQL
UPDATE SM_SALES_DETAIL SET SD_SRET_QTY_BU = SD_SRET_QTY_BU + newval            WHERE current of c2;

replace this with the follwing
SQL
UPDATE SM_SALES_DETAIL SET SD_SRET_QTY_BU = SD_SRET_QTY_BU + newval WHERE SD_QTY_BU=VSD_QTY_BU AND SD_SRET_QTY_BU=VSD_SRET_QTY_BU;
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900