2014-02-03 2 views
1

У меня есть следующие простые три строки в конце хранимой процедуры:Обновление таблицы внутри хранимой процедуры обновляет все строки

UPDATE `imthreadmember` 
    SET `lastUpdate`=CURRENT_TIMESTAMP 
WHERE `threadId` = threadId; 

Однако работающие в этом внутри прок, обновляет все строки в imthreadmember. Выполняя те же три строки в консоли, обновляет только те, что с этим threadId. Вставка select threadId; непосредственно перед этим оператором возвращает правильный идентификатор.

Я нахожусь на своем конце, чтобы выяснить, как это решить.

Строки imthreadmember были созданы ранее в том же прок, но CURRENT_TIMESTAMP можно использовать по умолчанию только один раз за столом я должен обновить этот столбец отдельно, по умолчанию идет в created колонке.

ответ

3

Имя вашей переменной совпадает с именем столбца. По правилам определения границ MySQL столбец сравнивается с самим собой.

Это хорошая привычка добавлять все переменные, используемые в хранимых процедурах с чем-то вроде v_. Таким образом, запрос должен выглядеть следующим образом:

UPDATE `imthreadmember` 
    SET `lastUpdate`=CURRENT_TIMESTAMP 
WHERE `threadId` = v_threadId; 

И, как следствие, никогда не назвать столбец, начиная с v_.

+0

Спасибо, что сделал трюк. Я, хотя я был «безопасен» со странными кавычками, которые использует mysql. Я помечаю ответ так, как принято, когда StackOverflow позволяет мне это делать. –

+0

@ A.Grandt. , , Если это заставляет вас чувствовать себя лучше, я сделал и эту ошибку (и я предполагаю, что почти все, кто использовал переменные в MySQL, также). –

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