0

ストアド プロシージャが呼び出し間で変数値またはストアド プロシージャの出力をキャッシュしているように見える奇妙な動作が発生しています。シナリオは次のとおりです。

テーブル フー

id INT(10);
name VARCHAR2(100);

id=5 および name="a_valid_value" の 1 つの行があります

DELIMITER $$
CREATE PROCEDURE fooProc()
BEGIN
      DECLARE testVar INT;
      SELECT id into @testVar FROM foo WHERE name = 'a_valid_value';
      SELECT @testVar as "testVar";
END;
$$
delimiter ;

CALL fooProc(); -- Outputs 5 as expected

DROP PROCEDURE fooProc;

DELIMITER $$
CREATE PROCEDURE fooProc()
BEGIN
      DECLARE testVar INT;
      SELECT id into @testVar FROM foo WHERE name = 'NONEXISTENT_VALUE';
      SELECT @testVar as "testVar";
END;
$$
delimiter ;

CALL fooProc(); -- Outputs 5!

ストアド プロシージャ本体を変更しても問題ありません。値 5 が var にキャッシュされますtestVar。それ自体を修正するための値を取得する唯一の方法は、切断してから再接続することです。次に、ストアド プロシージャの 2 番目のバージョンを呼び出すと、期待どおりに空の値が返されます。

4

1 に答える 1

4

@セッション固有のユーザー変数です。@プレフィックスを持たないローカル変数を使用したい。ストアド プロシージャ宣言から削除します。

于 2013-06-04T21:12:24.177 に答える