Возврат значения из UDF. (Баз данных) - PullRequest
1 голос
/ 23 июня 2011

Попытка создать следующую функцию постоянно выдает мне «Не разрешено возвращать набор результатов из функции» ... Google не показывал мне любви. Также не читал документы / примеры MySQL.

DELIMITER $$
CREATE
    FUNCTION `sparks`.`ChildCheck`(ParentType VARCHAR(2), ParentID VARCHAR(4)) RETURNS INTEGER
    BEGIN
DECLARE ParentString VARCHAR(8);
DECLARE Kids INTEGER;
SET ParentString=CONCAT(ParentType, ':',ParentID);
SET Kids = 0;
SELECT Kids=Kids+1 AS KidCount
FROM (SELECT parent FROM mod_CMS WHERE dept_id=1 AND parent=ParentString
    UNION
    SELECT parent FROM mod_External_Links WHERE dept_id=1 AND parent=ParentString
    UNION
    SELECT parent FROM dept_mods WHERE dept_id=1 AND parent=ParentString) t1;
RETURN (KidCount);
END$$
DELIMITER ;

Это не работает.

Следующее работает.

DELIMITER $$
DROP FUNCTION IF EXISTS `next_april1`$$
CREATE FUNCTION `next_april1`(inDate DATETIME) RETURNS DATE
DETERMINISTIC
BEGIN
  DECLARE outDate DATE;
  SET outDate = (SELECT CASE
              WHEN MONTH(inDate) < 4 THEN CONCAT(YEAR(inDate), '-04-01')
              ELSE CONCAT(YEAR(inDate) + 1, '-04-01')
              END);
RETURN (outDate);
END$$
DELIMITER;

Синтаксис для рабочего:

select next_april1(NOW());

и возвращается

'2012-04-01'

Я ищу первый, который будет работать как:

select KidCount('C','3')

Выход: 4

Я должен что-то упустить между двумя функциями.

1 Ответ

1 голос
/ 23 июня 2011

Согласно документации для Процедура создания :

Заявления, которые возвращают набор результатов может использоваться в хранимой процедуре но не в сохраненной функции. это Запрет включает в себя инструкции SELECT которые не имеют INTO var_list пункт и другие заявления, такие как ПОКАЗАТЬ, ОБЪЯСНИТЬ И ПРОВЕРИТЬ ТАБЛИЦУ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...