簡體   English   中英

觸發器更新錯誤 - 使用的SELECT語句具有不同的列數

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

我的庫存移動表上有一個觸發器,我正在嘗試使用它來更新庫存表。 但是,一旦第一條記錄被寫入移動,任何其他記錄都會拋出上述錯誤。

不知道如何解決它。

見下面的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 ;

您在SELECT語句中選擇了少一列

就像你選擇了15列一樣

SELECT MATERIALBATCHST_STATUSCONSIGNLOCATIONSTOCKISTCUSTOMERVENDORQUANTITYUOMCOST
VALUECURRENCYENTRY_DATEENTRY_TIME

但是你已經指定了16個變量來保存

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

這就是它給出錯誤的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM