Подскажите плз. почему
INSERT INTO `[prefix]_rubrics` ( `id` , `date` ) VALUES ("", NOW());
генерирует предуреждеие. ([prefix] - здесь и далее заменяется на произвольный, опеделённый пользователем префикс средствами PHP)
Код функции:
CREATE FUNCTION `[prefix]_ADD_RUBRIC`(user_idnr INT)
RETURNS INT
LANGUAGE SQL #Язык функции SQL
NOT DETERMINISTIC #Функция может возвращать разные результаты для одних и тех же параметров
SQL SECURITY INVOKER #Разрешена для запуска любым пользователем
BEGIN
#Переменные используемые функцией
DECLARE user_grant INT; #ID прав текущего прользователя
DECLARE max_language_id INT; #Максемальный ID таблицы языков
DECLARE inserted_id INT DEFAULT 0; #ID сгенерированный INSERT запросом
DECLARE cur_language_id INT DEFAULT 0; #ID текущий ID обрабатываемый курсором
DECLARE roll_back_var INT DEFAULT 0; #Флаг указывающий на то, что была совершена хотябы одна втавка данных в таблицу [prefix]_rubrics_names
#Курсоры
#Курсор выбирает все идентификаторы языков
DECLARE language_cursor CURSOR FOR SELECT `[language_id_field]` FROM `[language_table]` LIMIT 255;
#Обработчики ошибок
DECLARE EXIT HANDLER FOR SQLWARNING #Обработка SQL предупреждений
BEGIN
#Производим откат
IF (inserted_id > 0) THEN
DELETE FROM `[prefix]_rubrics` WHERE `id` = inserted_id LIMIT 1;
END IF;
IF (roll_back_var > 0) THEN
DELETE FROM `[prefix]_rubrics_names` WHERE `rubric_id` = inserted_id;
END IF;
RETURN -1; #Возвращаем флаг неудачи
END;
DECLARE EXIT HANDLER FOR NOT FOUND #Обработка SQL ошибок типа - невозможно найти объект
BEGIN
#Производим откат
IF (inserted_id > 0) THEN
DELETE FROM `[prefix]_rubrics` WHERE `id` = inserted_id LIMIT 1;
END IF;
IF (roll_back_var > 0) THEN
DELETE FROM `[prefix]_rubrics_names` WHERE `rubric_id` = inserted_id;
END IF;
RETURN -2; #Возвращаем флаг неудачи
END;
DECLARE EXIT HANDLER FOR SQLEXCEPTION #Обработка ошибок неохваченных NOT FOUND и SQLWORNING
BEGIN
#Производим откат
IF (inserted_id > 0) THEN
DELETE FROM `[prefix]_rubrics` WHERE `id` = inserted_id LIMIT 1;
END IF;
IF (roll_back_var > 0) THEN
DELETE FROM `[prefix]_rubrics_names` WHERE `rubric_id` = inserted_id;
END IF;
RETURN -3; #Возвращаем флаг неудачи
END;
#Тело процедуры
#Проверяем наличие необходимых прав у пользователя
SELECT [prefix]_CHECK_USER_GRANT(user_idnr, "add_rubric") INTO user_grant;
IF (user_grant = 1) THEN
#Поскольку в случае использования функций транзакции не доступны,
#то для сохранения целостности данных выберем сформируем переменную
#значение которой будем использовать для реализации отката
SELECT MAX(`[language_id_field]`) INTO max_language_id FROM `[language_table]` LIMIT 1; #Определяем максемальный ID в таблице языков
INSERT INTO `[prefix]_rubrics` ( `id` , `date` ) VALUES ("", NOW()); #Добавляем новую рубрику
SET inserted_id = LAST_INSERT_ID(); #Получаем ID новой рубрики
OPEN language_cursor; #Открываем курсор
insert_lines : LOOP #Циклически обходи курсор, добавляя записи
FETCH language_cursor INTO cur_language_id;
INSERT INTO `[prefix]_rubrics_names` ( `id` , `rubric_id` , `rubric_name` , `language_id` ) VALUES ("", inserted_id, "", cur_language_id);
SET roll_back_var = 1;
IF (cur_language_id = max_language_id) THEN LEAVE insert_lines;
END IF;
END LOOP insert_lines;
CLOSE language_cursor; #Закрываем курсор
RETURN 1; #Устанавливаем флаг успеха
ELSE
RETURN -4; #Устанавливаем флаг неудачи
END IF;
END;
Зарание благодарю.