У меня есть столбец INT 'Port', который должен быть в диапазоне от 30000 до 50000.
Итак, у меня есть хранимая процедура, вставляющая значения (Port is NOT NULL).Поэтому я должен выбрать «вручную» значение для хранения в этом поле.Проблема в том, что хотя я могу вставлять пошагово (30000,30001,30002 ....), в определенный момент некоторые записи удаляются (становится 30000, 30002, 30004 ....), поэтому есть отверстия, которые нужно установить.
Мне нужно разместить в моем SP способ, чтобы соответствовать этим отверстиям (на моем примере они 30001,30003 ....).Моя проблема заключается в том, как проверить в SP, если определенное значение уже «занято».
Я думал, используя LOOP из MySQL.Пробовал что-то вроде этого:
CREATE PROCEDURE teste()
BEGIN
DECLARE p INT;
DECLARE aux INT;
SET p = 30000;
label1: LOOP
SELECT Port FROM Reg WHERE Port = p INTO aux;
IF p = 50000 THEN
LEAVE label1;
END IF;
IF aux IS NULL THEN -- aux-1 is not null, so I can verify the "next miminum available position"
aux = aux - 1;
LEAVE label1;
ELSE
SET p = p + 1;
ITERATE label1;
END IF;
END LOOP label1;
RETURN aux;
END $$
Моя проблема заключается в получении значения результата.Если я размещу эту инструкцию RETURN, я получу информацию, которая разрешена только для FUNCTION.И результат SELECT всегда равен нулю, когда я заканчиваю цикл.
Что я могу сделать?