简体   繁体   中英

Trigger updation error - The used SELECT statements have a different number of columns

I have a trigger on my stock movements table and am trying to update the stock table using it. However once the first record gets written to movements any additional records throws the above error.

Not sure how to resolve it.

See below SQL

DROP TRIGGER IF EXISTS `trigUpdateStock`;

DELIMITER $$

CREATE TRIGGER `trigUpdateStock` AFTER INSERT ON `material_document`
    FOR EACH ROW BEGIN
        SELECT COUNT(MATERIAL) INTO @count FROM `stock` WHERE MATERIAL = NEW.MATERIAL
                                                   AND BATCH = NEW.BATCH;
        IF @count > 0 THEN
            SELECT `MATERIAL`, `BATCH`, `ST_STATUS`, `CONSIGN`, `LOCATION`, `STOCKIST`, `CUSTOMER`, `VENDOR`, `QUANTITY`, `UOM`, `COST`, `VALUE`, `CURRENCY`, `ENTRY_DATE`, `ENTRY_TIME`
                INTO @mat, @batch, @st_status, @cons, @loc, @stkist, @cust, @vend, @qty,
                     @qty, @uom, @cost, @val, @curr, @date, @time
                FROM `stock`
                WHERE `MATERIAL` = NEW.MATERIAL
                  AND `BATCH` = NEW.BATCH;
            SET @qty = @qty + NEW.QUANTITY;
            SET @val = @val + NEW.VALUE;
            SET @cost = @cost + NEW.COST;
            UPDATE `stock` SET `QUANTITY` = @qty,
                               `VALUE` = @val,
                               `COST` = @cost
                         WHERE `MATERIAL` = NEW.MATERIAL
                           AND `BATCH` = NEW.BATCH;
        ELSE
            SELECT ST_STATUS INTO @st_status 
                FROM document_type
                WHERE DOC_TYPE = NEW.DOC_TYPE;
            INSERT INTO `stock` (`MATERIAL`, `BATCH`, `ST_STATUS`, `CONSIGN`, `LOCATION`, `STOCKIST`,                                                  `CUSTOMER`, `VENDOR`, `QUANTITY`, `UOM`, `COST`, `VALUE`, `CURRENCY`,                                            `ENTRY_DATE`, `ENTRY_TIME`)
                        VALUES (NEW.MATERIAL, NEW.BATCH, @st_status, NEW.CONSIGN, NEW.LOCATION,                                                     NEW.STOCKIST, NEW.CUSTOMER, NEW.VENDOR, NEW.QUANTITY, NEW.UOM,                                                  NEW.COST, NEW.VALUE, NEW.CURRENCY, NEW.ENTRY_DATE, NEW.ENTRY_TIME);
        END IF;


    END;$$

DELIMITER ;

You have select one less column in SELECT statement

like you have 15 column selected

SELECT MATERIAL , BATCH , ST_STATUS , CONSIGN , LOCATION , STOCKIST , CUSTOMER , VENDOR , QUANTITY , UOM , COST ,
VALUE , CURRENCY , ENTRY_DATE , ENTRY_TIME

But you have specified 16 variable to hold

INTO @mat, @batch, @st_status, @cons, @loc, @stkist, @cust, @vend, @qty, @qty, @uom, @cost, @val, @curr, @date, @time

That's why it is giving error.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM