0

だから私は貨物を計算するためにこの手順を持っています。一致する行から 2 つの値を選択する必要があります。そして、 に基づく条件に従って、in_quantity以前に選択されたこれら 2 つの値のうちの 1 つが に設定されout_totalます。

DELIMITER $$
CREATE PROCEDURE freight_calc(
    IN in_delivery_location VARCHAR(100),
    IN in_category_id INT(11),
    IN in_quantity INT(11),   
    OUT out_total DECIMAL(10,2)
    )
BEGIN
    DECLARE val1 DECIMAL(10,2);
    DECLARE val2 DECIMAL(10,2);

    SELECT col1,col2 INTO val1, val2 
    FROM `freight_rules` fr
    WHERE fr.category_id = in_category_id AND fr.delivery_location = in_delivery_location;

    IF(in_quantity <= 9) THEN
        out_total = val1;
    END IF;

    IF(in_quantity > 9) THEN
        out_total = val2;
    END IF;

END$$
DELIMITER ;

実行すると、次のエラーが発生します-

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '= val1;
    END IF;

    IF(in_quantity > 9) THEN
        out_total = val2' at line 16 
4

1 に答える 1

2

mysql の変数に任意の値が代入されるため、SETキーワードを使用します。手順のみ変更

SET out_total = val1;
SET out_total = val1;

DELIMITER $$
CREATE PROCEDURE freight_calc(
    IN in_delivery_location VARCHAR(100),
    IN in_category_id INT(11),
    IN in_quantity INT(11),   
    OUT out_total DECIMAL(10,2)
    )
BEGIN
    DECLARE val1 DECIMAL(10,2);
    DECLARE val2 DECIMAL(10,2);

    SELECT col1,col2 INTO val1, val2 
    FROM `freight_rules` fr
    WHERE fr.category_id = in_category_id AND fr.delivery_location = in_delivery_location;

    IF(in_quantity <= 9) THEN
      SET out_total = val1;
    END IF;

    IF(in_quantity > 9) THEN
       SET out_total = val1;
    END IF;

END$$
DELIMITER ;
于 2016-02-26T11:04:24.003 に答える