2017-05-29 6 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声明

に1つの以下の列を選択している15の列は、

にSELECT MATERIALBATCHST_STATUSCONSIGNLOCATIONを選択しています STOCKIST,CUSTOMERVENDORQUANTITYUOMCOST
VALUECURRENCYENTRY_DATEENTRY_TIME

しかし、あなたは@mat、@batch、@st_status、INTO

を保持するための16の変数を指定しています@コンス、@loc、@stkist、@cust、@vend、 @qty、 @qty、@uom、@cost、@val、@curr、@date、@time

これがエラーを起こす理由です。

+0

ありがとうございます、はい、私は@qtyを2回追加しました。この昨日を閉じようとしましたが、それは私を許可しませんでした。 – Hetti

関連する問題