Я перемещаю данные из электронных таблиц в MySQL. Итак, мы знаем, что в электронных таблицах обычно нет идентификатора, вместо этого просто текст.
City;Country;...
New York;USA;...
Berlim;Germany;...
Munich,Germany,...
Имея это в виду, давайте рассмотрим две таблицы:
Страна: [ID, имя]
Город: [ID, страна (FK), имя]
Я не хочу создавать несколько стран с одинаковыми именами, но я хочу использовать существующую. Отлично, так что давайте добавим ФУНКЦИЮ в состоянии ВСТАВИТЬ, которая выполняет поиск, вставляет (при необходимости) и возвращает идентификатор страны.
Итак, я создал функцию, чтобы FIRST оценить, существует ли Страна если нет, то создать страну
getCountry (parameter IN strCountry varchar(100))
BEGIN
SELECT ID INTO @id from `country` WHERE country.country = strCountry ;
IF (@id is NULL OR @id= 0) THEN
INSERT INTO `country` (country) VALUES (strCountry);
if (ROW_COUNT()>0) THEN
SET @id = LAST_INSERT_ID();
else
SET @id = NULL;
END IF;
END IF ;
RETURN @id;
END
А потом у меня есть Десятки тысяч вставок, таких как
INSERT INTO city (name, country) VALUES ('name of the city', getCountry('new or existing one'));
Функция хорошо работает при выполнении один, например
SELECT getCountry('Aruba');
Однако, когда я выполняю это в этих ОЧЕНЬ ДЛИННЫХ SQL (22K + строки), он не работает .... он использует в основном последний идентификатор, созданный ДО запуска выполнение. Может быть, я должен «дождаться» выполнения функции и вернуть правильный результат? Но как?
Что я делаю не так?