2017-05-29 44 views
1

我在我的股票移動表上有一個觸發器,並且正在嘗試使用它更新股票表。但是,一旦第一條記錄被寫入運動,任何額外的記錄都會拋出上述錯誤。觸發更新錯誤 - 使用的SELECT語句具有不同數量的列

不知道如何解決它。

參見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 ; 
+0

您的'SELECT ... INTO'選擇15列16個變量 – Vatev

回答

0

下面你有SELECT聲明

選擇一個更小柱像你15列中選擇

選擇MATERIALBATCHST_STATUSCONSIGNLOCATIONSTOCKISTCUSTOMERVENDORQUANTITYUOMCOST
VALUECURRENCYENTRY_DATEENTRY_TIME

但已指定16個變量來保存

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

這就是爲什麼它給錯誤。

+0

謝謝,是的,我注意到我自己,我已經兩次加入@qty。試圖關閉這個昨天,但它不允許我。 – Hetti