Я использую оператор CASE как часть процедуры обновления, и в прошлом я просто повторял тестовый запрос для каждой строки оператора case, как показано ниже, и это успешно работает.
UPDATE table_name SET column_name =
CASE
WHEN TRIM(SUBSTRING(SUBSTRING_INDEX(line, ' ',2), LOCATE(' ',line))) = 'Jan' THEN 01
WHEN TRIM(SUBSTRING(SUBSTRING_INDEX(line, ' ',2), LOCATE(' ',line))) = 'Feb' THEN 02
WHEN TRIM(SUBSTRING(SUBSTRING_INDEX(line, ' ',2), LOCATE(' ',line))) = 'Mar' THEN 03
etc...
END
WHERE column_name IS NULL
Я хочу, чтобы оператор CASE не обрабатывал тестовый запрос каждый раз, когда он не соответствует условию. Таблицы, с которыми я выполняю эти процедуры, могут быть довольно большими, поэтому я стремлюсь к небольшой эффективности обработки.
Я думал о том, чтобы выполнить тестовый запрос один раз в строке и сохранить результат в переменную. Затем оператор CASE проверяет эту переменную и действует соответствующим образом при получении совпадения.
Когда я запускаю запрос ниже, я получаю сообщение об ошибке
Ошибка в запросе (1064) : Синтаксическая ошибка рядом с 'ОБНОВЛЕНИЕ table_name SET SETMMonth = CASE WHEN @var_col' в строке 3
SET @var_column_name = TRIM(SUBSTRING(SUBSTRING_INDEX(line, ' ',2), LOCATE(' ',line)))
UPDATE table_name
SET column_name =
CASE
WHEN @var_column_name = 'Jan' THEN 01
WHEN @var_column_name = 'Feb' THEN 02
WHEN @var_column_name = 'Mar' THEN 03
etc ...
END
WHERE column_name IS NULL