Проблема: У меня есть хранимая процедура MySQL, и я хочу, чтобы каждый раз, каждый предыдущий запуск, и я не могу инициализировать его до нуля.MySQL Сохраненная процедура с вставкой Выбор и пользовательская переменная
Деталь: У меня есть таблица данных (так называемого data
), который я читать и затем генерировать записи в соотношении 1 к 1 в другой таблице (так называемой results
). Я делаю это в хранимой процедуре, в которой используется оператор Insert Select. Я также использую переменную пользователя @mycount
, которая увеличивается с каждой строкой. Вот упрощенная версия моего кода:
DELIMITER //
CREATE PROCEDURE doSomething
BEGIN
SET @mycount := 0;
INSERT INTO results (data_id, mycounter)
SELECT data.id, (@mycount := @mycount+1)
FROM data LEFT JOIN results ON data.id = results.data_id
WHERE ... GROUP BY ...
HAVING ...
ORDER BY ...;
END //
DELIMITER ;
Анализ: Это работает почти по желанию, за исключением мне нужно @mycount
обнулить каждый раз, когда он запускается и SET
выше утверждение не достигает этого. При отладке я вижу, что последнее значение @mycount
всегда запоминается из предыдущего запуска хранимой процедуры. Я также попытался установить его на ноль после вставки.
Примечание:
- Я использую
@
переменные для увеличения и отслеживать номер строки. Может быть, здесь есть еще один вариант? - Проблема связана с условием наличия. Когда я запускаю аналогичный, но другой запрос без предложения предложения, переменная сбрасывает проблему.
Вопрос: Почему я не могу установить @mycount
до нуля перед запуском каждый раз? Если он сбрасывается, и только в том, что предложение «Мой» вызывает неожиданный подсчет, есть ли лучший способ переписать мой SQL?
Я надеюсь, что кто-то столкнется с чем-то подобным, так как это кажется довольно неясным.
возможный дубликат [Как SELECT \ * INTO \ [temp table \] FROM \ [хранимая процедура \]] (http://stackoverflow.com/questions/653714/how- to-select-in-temp-table-from-stored-procedure) – Jackcob
@Jackcob Nope, совсем нет. – sh0ber