mysql - 从 UDF 返回一个值。 (MySQL)

标签 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

我一定是在这两个函数之间遗漏了一些东西。

最佳答案

根据 Create Procedure 的文档:

Statements that return a result set can be used within a stored procedure but not within a stored function. This prohibition includes SELECT statements that do not have an INTO var_list clause and other statements such as SHOW, EXPLAIN, and CHECK TABLE.

关于mysql - 从 UDF 返回一个值。 (MySQL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6456138/

相关文章:

mysql - Laravel 从一张表中选择价格最低的独特产品

Mysql - 合并具有唯一值的行 - 对它们进行分组和计数

mysql - 如何在 WHERE 中使用 Alias 并与 LIMIT 进行操作

SQL:IN 子句的问题,如何返回所有值,甚至是重复值

php - 是否有一个 PHP 函数可以在不切割单词的情况下将字符串切割成多个部分?

mysql - 从数据库输出数据时的问号

SQL 查询理论问题 - 单语句与多语句查询

jQuery if hasclass then 函数

vb.net - 跟踪具有多种功能的表格中的错误

javascript - 比较左侧有空格的字符串