2

ID をパラメーターとして受け取る関数を作成する必要があります。次に、この指定された ID のテーブルで選択ケースを実行します。ケースの when ステートメントは、行数をカウントします。

これが私の機能です:

CREATE function db_name.insert_stage(idStage INT)
    returns integer
    BEGIN   
        SELECT CASE
            WHEN COUNT(*) < 10 THEN 0
            WHEN COUNT(*) >= 10 and COUNT(*) <= 12 THEN 392
            WHEN COUNT(*) >= 13 and COUNT(*) <= 17 THEN 490
            ELSE 588
            END AS cost
        FROM inscriptions WHERE paid = 1 AND id_stage = idStage;
        RETURN cost;
    END

次に、トリガーを使用して、ステージに既に存在する各行のフィールドにコストを設定します。このトリガーは、ステージの挿入時にも呼び出されます。

CREATE TRIGGER insert_stage_frais_secretariat BEFORE INSERT ON stage
FOR EACH ROW SET stage.fraisSecretariat = select anper_extranet.insert_stage(stage.id);

関数が機能していないため、トリガーがまだ機能しているかどうかはわかりません。

これがphpmyadminが私に言うことです:

1064 - SQL 構文にエラーがあります。10 行目の near '' を使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。

selectステートメントを試してみましたが、10行目で何が問題なのかわかりません。

4

1 に答える 1

2

これを試して:

delimiter //
CREATE FUNCTION db_name.insert_stage(idStage INT)
RETURNS Integer
BEGIN
  DECLARE var_name INTEGER;
  SET var_name = 0;
  SELECT CASE
    WHEN COUNT(*) < 10 THEN 0
    WHEN COUNT(*) >= 10 and COUNT(*) <= 12 THEN 392
    WHEN COUNT(*) >= 13 and COUNT(*) <= 17 THEN 490
    ELSE 588
    END
into var_name
FROM inscriptions WHERE paid = 1 AND id_stage = idStage;   
 RETURN var_name;
END //
于 2013-09-06T08:38:05.827 に答える