2014-12-15 2 views
0

Я пытаюсь получить значение count из таблицы и сохранить его в переменной с помощью инструкции select в хранимой процедуре. Но когда я использую следующие строки statemntsИспользование переменной в select query

DECLARE totalRegister INTEGER; 
SET @sqlstmt = CONCAT('SELECT COUNT(DISTINCT(msisdn)) INTO ', totalRegister, ' FROM sm_history.svc_mgmt_', @yesterdayMonth,' WHERE action_type = 1 AND DATE(created) = ', yesterday); 

PREPARE statement FROM @sqlstmt; 
EXECUTE statement; 
DEALLOCATE PREPARE statement; 

Я получаю следующее сообщение об ошибке при вызове хранимой процедуры

У Вас есть ошибка в вашем SQL синтаксиса; проверьте руководство, соответствующее версии вашего сервера MySQL, для правильного синтаксиса для использования рядом с «NULL» по строке 1

Я еще отлаживал свою хранимую процедуру с помощью . Выберите @sql; и удивился, увидев, что возвращается NULL

Edit 1: Переменных вчера и yesterdayDate возвращающегося значения правильно, поэтому я уверен, что это не проблема с этими переменными. Проблема возникает из-за totalRegister переменной

+0

вчера это ошибка? – Mailkov

+0

откуда появляются значения переменной totalRegister, '@ вчераMonth' и' вчера'? вы уверены, что любой из них не является нулевым? –

+0

попытайтесь проверить все эти значения переменных. Любой из них должен быть нулевым. –

ответ

0

К счастью, я получил решение, используя хит и пробную версию. Вместо использования функции totalRegister в качестве переменной в функции CONCAT она заменила на @totalRegister, что заставило хранимую процедуру работать нормально.

DECLARE totalRegister INTEGER; 
SET @sqlstmt = CONCAT('SELECT COUNT(DISTINCT(msisdn)) INTO @totalRegister FROM sm_history.svc_mgmt_',@yesterdayMonth ,' WHERE action_type = 1 AND DATE(created) = ', "'", yesterday, "'"); 
PREPARE statement FROM @sqlstmt; 
EXECUTE statement; 
DEALLOCATE PREPARE statement; 
select @totalRegister; 

Надпись работала отлично. Anyways спасибо всем за вклад

Смежные вопросы