0

挿入トリガーのオーダーラインが機能しているテーブルがありますが、オーダー番号テーブルでは、シリアル番号に基づいてオーダー番号を更新したい

だから更新のために私は2行を書いた

1 行目: UPDATE TEMPSTORAGE SETORDERNUMBER =orderno+1,SERIALNUMBER=serialno; は where 条件なしで正常に動作しています

2 行目: UPDATE ORDERNUMBER SETORDERNUMBER =orderno+1 WHERESERIALNUMBER= serialno; が機能していません。どなたか提案していただけないでしょうか。シリアル番号に基づいて ordernumber を更新する方法

DELIMITER $$

USE `temp`$$

DROP TRIGGER /*!50032 IF EXISTS */ `trg_updateordernumber`$$
CREATE TRIGGER `trg_updateordernumber` AFTER INSERT ON `ORDERLINES` 
    FOR EACH ROW BEGIN

        DECLARE orderno VARCHAR(255);
        DECLARE serialno VARCHAR(255);
        SET @orderno = 'xxx';

        SELECT ORDERNUMBER, SERIALNUMBER INTO orderno, serialno 
        FROM ORDERLINES 
        WHERE ID=NEW.ID;

        UPDATE TEMPSTORAGE SET 
            `ORDERNUMBER` =orderno+1, 
            `SERIALNUMBER` =serialno;

        UPDATE ORDERNUMBER SET 
            `ORDERNUMBER`=orderno+1 
        WHERE `SERIALNUMBER` = serialno;
    END;
$$

DELIMITER ;

mysql トリガーに問題はありますか (ないことを願っています)...? そうでない場合は、なぜline2が機能しないのか教えてください。

よろしくお願いします。

4

1 に答える 1

1

BEFORE INSERTトリガーは必要ですが、必要ありませんAFTER INSERT

ORDERLINESORDERNUMBERテーブルの関係
がわかりませんが、次のことを試すことをお勧めします(テストされていません):

DELIMITER $$

USE `temp`$$

DROP TRIGGER /*!50032 IF EXISTS */ `trg_updateordernumber`$$
CREATE TRIGGER `trg_updateordernumber` BEFORE INSERT ON `ORDERLINES` 
    FOR EACH ROW BEGIN
        UPDATE TEMPSTORAGE SET 
            `ORDERNUMBER` =NEW.ORDERNUMBER+1, 
            `SERIALNUMBER` =NEW.SERIALNUMBER;

        UPDATE ORDERNUMBER SET 
            `ORDERNUMBER`==NEW.ORDERNUMBER+1 
        WHERE `SERIALNUMBER` = NEW.SERIALNUMBER;
    END;
$$

DELIMITER ;
于 2012-06-25T14:30:21.940 に答える