2

私はストアド プロシージャを作成するのが初めてで、このプロシージャでエラーを見つけることができないようです。エラーは where 部分の近くにマークされています。

if 条件に基づいてセットが行われる例を探してみましたが、そのような例が見つからないようです。誰かが私のエラーを指摘できますか?

DELIMITER $$

CREATE PROCEDURE `incubation`.`bt_voice_modification` 
    (in input_slot varchar(45),in input_port varchar(45))
BEGIN
    SET @SVLAN_STH:=1000;
    SET @SVLAN_DTH:=999;
    SET @CVLAN_DTH:=1000;
    SET @FLOW_INSTANCE:=1;

    UPDATE one_2_one_table
        SET  L2S_USER_FLOW_INSTANCE = @FLOW_INSTANCE := @FLOW_INSTANCE+1;
        SET  L2S_NW_SLOT = input_slot;
        SET  L2S_NW_PORT = input_port;
        IF STH_DTH = 'STH' then
            set  L2S_NW_SVLAN = @SVLAN_STH :=@SVLAN_STH + 1;
        ELSE 
            set  L2S_NW_SVLAN = @SVLAN_DTH ;
            set  L2S_NW_CVLAN = @CVLAN_DTH :=@CVLAN_DTH + 1;
        END if;
        WHERE IPDSLAM_USER_SLOT = 2 AND L2S_USER_TYPE like "%gplt%";

END
4

1 に答える 1

1

UPDATEあなたのコードは、ステートメントがどのように機能するか、または正確な構文を明確に把握していないことを示唆しています。を付ける;と、(UPDATE) ステートメントの終わりを示します。構文は - 1 つのテーブルの場合:

UPDATE tableX

  SET columnA = what_value_should_columnA-get ,
      columnB = what_value_should_columnB_get ,
      ...
      columnX = what_value_should_columnX_get 

WHERE (conditions that restrict the rows that will be affected)

ORDER BY SomeColumn ;   --- this can be used in MySQL only. Standard SQL 
                        --- (and most DBMS) do not allow ORDER BY clause in
                        --- UPDATE statements. Since you are using variables
                        --- and the order of updating affects the updated values,
                        --- it's essential that you include an ordering.

したがって、あなたUPDATEは次のようになります。

UPDATE one_2_one_table
    SET  L2S_USER_FLOW_INSTANCE = @FLOW_INSTANCE := @FLOW_INSTANCE+1 ,
         L2S_NW_SLOT = input_slot,
         L2S_NW_PORT = input_port,
         L2S_NW_SVLAN = CASE WHEN STH_DTH = 'STH'
                               THEN @SVLAN_STH := @SVLAN_STH + 1
                               ELSE @SVLAN_DTH 
                        END ,
         L2S_NW_CVLAN = CASE WHEN STH_DTH = 'STH'
                               THEN L2S_NW_CVLAN
                               ELSE @CVLAN_DTH := @CVLAN_DTH + 1
                        END

WHERE IPDSLAM_USER_SLOT = 2 
  AND L2S_USER_TYPE like '%gplt%' 

ORDER BY SomeColumn ;
于 2012-06-12T08:11:43.713 に答える