2016-10-17 3 views
1

Я пытаюсь создать хранимую процедуру для создания некоторых отчетов в csv. Подпись выглядит следующим образом:MySQL Хранимая процедура переопределяет пустые параметры

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

SP создает запрос с условным ИНЕКЕМ на основе входного параметра в «кабинете».

DECLARE studyFilter TEXT DEFAULT ''; 

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

Это хорошо работать, если я называю SP с не пустым параметром исследования, eg.g

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

Но если я называю SP с пустым исследованием, вместо того, чтобы пустые параметры по SP использует последние значения исследования.

например. если я вызываю, в последовательности вызов testSP ('/ tmp/test1.csv', 'study1');

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

Во второй раз значение параметра остается «study1», поэтому запрос имеет неправильное предложение WHERE.

Как это возможно? как я могу правильно сбросить это значение параметра? Я использую MySQL 6.1 и MySQL Workbench для тестирования SP. Благодаря!

ответ

1

Ваш @studyFilter действителен для целая сессия, но изменяется только в том случае, если условие истинно. Вот почему он сохраняет предыдущий результат, если условие ложно. Инициализируйте его до NULL или до an empty string.

0

Ok найти его, я использовал переменные сессии @studyFilter в то время как я должен использовать локальную переменную studyFilter

меняющийся код на следующие работали:

DECLARE studyFilter TEXT DEFAULT '';  
IF (study IS NOT NULL AND study != '') THEN 
    SET studyFilter = CONCAT(' AND st.goid like \'%',study,'%\' '); 
END IF; 
Смежные вопросы