从UDF返回值。 (MySQL的)

时间:2011-06-23 14:56:56

标签: mysql sql function

尝试创建以下功能一直让我'不允许从函数返回结果集'...谷歌告诉我没有爱。也没有阅读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 个答案:

答案 0 :(得分:1)

根据Create Procedure的文档:

  

返回结果集的语句   可以在存储过程中使用   但不在存储的功能中。这个   禁止包括SELECT语句   没有INTO var_list的   条款和其他声明,如   显示,解释和检查表。