Итак, у меня есть проект, в котором я индексирую товарные запасы по значениям штрих-кода UPC. Моя таблица инвентаризации имеет основной уникальный столбец upcID, этот столбец не увеличивается автоматически. В тех случаях, когда я сканирую штрих-код, чтобы добавить его в таблицу, он имеет номер штрих-кода gs1, который он использует в качестве идентификатора. Мы хотели бы добавить товары, у которых нет штрих-кода, генерируя уникальный 12-значный номер, начинающийся с «99991», как поддельную часть производителя в формате gs1 upc. Сгенерированный идентификатор должен добавить уникальную часть, используя еще 7 цифр, поэтому в итоге мы получим, например, «999910000001». Как только идентификатор класса элемента запасов окажется в таблице, я могу распечатать этикетки со штрих-кодом и прикрепить их к этим элементам.
Итак, я искал, как сделать триггер перед вставкой, который будет генерировать код, если идентификатор вставки равен NULL, проверьте его по строкам в таблице и увеличивайте его по мере необходимости, пока он не станет уникальным, а затем выполните вставку с ним в качестве идентификатора. Теоретически что-то вроде этого (имейте в виду, что мне уже давно не приходилось писать триггер процедуры MySQL)
Код: Выделить всё
BEGIN
DECLARE isupcunique TINYINT;
DECLARE generatedupc DOUBLE;
SET isupcunique=0;
SET generatedupc=999910000000;
IF new.upcID IS NULL
WHILE isupcunique = 0
'see if its there
IF (select upcID from thetable where upcID=generatedupc limit 1) THEN
'do nothing but add to generatedupc
SET generatedupc+=1;
ELSE
SET new.upcID=generatedupc;
SET isupcunique=1
END IF;
END WHILE;
END IF;
END;
Я понимаю, что мой код неблизок. Я не думаю, что в триггерах существуют IF... Просто общая суть того, что, по моему мнению, мне нужно сделать.
У меня есть идеи?
Подробнее здесь:
https://stackoverflow.com/questions/793 ... id-is-null