在庫移動テーブルにトリガーがあり、それを使用して在庫テーブルを更新しようとしています。ただし、最初のレコードが移動に書き込まれると、追加のレコードが上記のエラーをスローします。トリガー更新エラー - 使用された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 ;
あなたの 'SELECT ... INTO'は15個の列を16個の変数に選択します – Vatev