Question

I'm trying to create a trigger that updates the stock of a certain product in PRODUCTOS table, this trigger is supose to fire when a new buy is inserted on COMPRAS

CREATE OR REPLACE TRIGGER TRIGGER_COMPRAS
AFTER INSERT ON DCOMPRAS
    FOR EACH ROW
    DECLARE
    NEWSTOCK NUMBER;
    BEGIN
        SELECT STOCK
        INTO NEWSTOCK
        FROM PRODUCTOS
        WHERE ID_PRODUCTO = :NEW.ID_PRODUCTO;

        NEWSTOCK := NEWSTOCK + :NEW.CANTIDAD;

        UPDATE INTO PRODUCTOS
        (STOCK)
        VALUES
        (NEWSTOCK)
        WHERE ID_PRODUCTO = :NEW.ID_PRODUCTO;

END TRIGGER_COMPRAS;

but when I try to run it, it gives me:

ERROR at line 9: PLS-00103: Encountered the symbol "=" when expecting one of the following:

   := . ( @ % ;
7.             SELECT STOCK
8.             INTO NEWSTOCK
9.             FROM PRODUCTOS
10.             WHERE ID_PRODUCTO = :NEW.ID_PRODUCTO;
11.             NEWSTOCK := NEWSTOCK + :NEW.CANTIDAD;

------------EDIT-----------

Changed NEWSTOCK := NEWSTOCK + :NEW.CANTIDAD; but yet, another error:

ERROR at line 11: PL/SQL: ORA-00903: invalid table name
1. CREATE OR REPLACE TRIGGER TRIGGER_COMPRAS
2.     AFTER INSERT ON DCOMPRAS
3.         FOR EACH ROW
Was it helpful?

Solution

Final statement must be something like this

CREATE OR REPLACE TRIGGER TRIGGER_COMPRAS
AFTER INSERT ON DCOMPRAS REFERENCING OLD AS OLDREC NEW AS NEWREC FOR EACH ROW
DECLARE
    NEWSTOCK NUMBER;
BEGIN
        SELECT STOCK
        INTO NEWSTOCK
        FROM PRODUCTOS
        WHERE ID_PRODUCTO = :NEW.ID_PRODUCTO;

        NEWSTOCK := NEWSTOCK + :NEW.CANTIDAD;

        UPDATE PRODUCTOS
           SET STOCK = NEWSTOCK 
        WHERE ID_PRODUCTO = :NEW.ID_PRODUCTO;

END TRIGGER_COMPRAS;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top