Я использую MySQL 5.5 (x64) и MySQL Workbench 5.2, развернутые локально на рабочей станции Windows 7 для целей разработки. Я использовал MySQL Workbench для построения схемы со следующим определением функции:
CREATE FUNCTION `db`.`get_public_name` (GPN_entID INT) RETURNS VARCHAR(64)
DETERMINISTIC
BEGIN
DECLARE GPN_pubName VARCHAR(64);
SELECT public_name INTO GPN_pubName
FROM entity WHERE id_entity=GPN_entID LIMIT 1;
RETURN GPN_pubName;
END
Затем я пытаюсь "переадресовать инженера" схему в базу данных с указанными ниже параметрами:
- УДАЛЯТЬ объекты перед каждым созданным объектом
- Генерировать DROP SCHEMA
- Добавлять SHOW WARNINGS после каждого оператора DDL
- GENERATE INSERT Утверждения для таблиц
После этого MySQL Workbench пытается опубликовать на сервере:
CREATE FUNCTION `db`.`get_public_name` (GPN_entID INT) RETURNS VARCHAR(64)
DETERMINISTIC
BEGIN
DECLARE GPN_pubName VARCHAR(64);
SELECT public_name FROM entity WHERE id_entity = GPN_entID;
RETURN GPN_pubName;
END
Это приводит к следующей ошибке:
Executing SQL script in server
ERROR: Error 1415: Not allowed to return a result set from a function
При ближайшем рассмотрении я заметил, что предложения INTO и LIMIT оператора SELECT были удалены из исходного определения функции. Похоже, что это может быть кэшированная версия функции, но я перепробовал все, что только мог (за исключением удаления и переустановки MySQL Workbench), чтобы сбросить любой такой кэш для перезагрузки правильной версии, но безрезультатно.
Итак, почему происходит это изменение и как я могу предотвратить его?