2016-10-17 3 views
1

私はcsvでいくつかのレポートを生成するストアドプロシージャを作成しようとしています。MySQLのストアドプロシージャは空のパラメータをオーバーライドします

CREATE PROCEDURE testSP (IN filename VARCHAR(100), 
      IN study VARCHAR(100)) 

SPは、 'study'入力パラメータに基づいて条件付きWHERE句を含むクエリを作成します。

call testSP('/tmp/test.csv','study1'); 

をeg.g

DECLARE studyFilter TEXT DEFAULT ''; 

    IF (study IS NOT NULL AND study != '') THEN 
    SET @studyFilter = CONCAT(' AND st.goid like \'%',study,'%\' '); 
    END IF; 

私がいない空の学習パラメータでSPを呼び出す場合、これはうまく実行し、しかし、私は代わりに空のパラメーター有するので、空の調査でSPを呼び出す場合SPは研究の最後の値を使用します。

私がコールすると、順番に testSP( '/ tmp/test1.csv'、 'study1');

call testSP('/tmp/test2.csv',''); 

パラメータの値がまだ 'study1'であるため、クエリに間違ったWHERE句が含まれています。

これはどのように可能ですか?そのパラメータ値を正しくリセットするにはどうすればよいですか?私はMySQL 6.1とMySQL Workbenchを使ってSPをテストしています。ありがとう!

DECLARE studyFilter TEXT DEFAULT '';  
IF (study IS NOT NULL AND study != '') THEN 
    SET studyFilter = CONCAT(' AND st.goid like \'%',study,'%\' '); 
END IF; 

答えて

1

あなた@studyFilterが有効です:

0

[OK]を、それを見つける私が働いていた次のコードを変更するローカル変数studyFilter

を使用している必要がありますが、私は、セッション変数を@studyFilter使用していましたセッション全体が、条件が真である場合にのみ変更されます。そのため、条件がfalseの場合、以前の結果が保持されます。 NULLまたはan empty stringに初期化します。

関連する問題