mysql - 无法创建返回某些值的存储例程

标签 mysql sql database stored-procedures mariadb

我在 Maria DB 工作。我有存储过程。现在我需要添加一些返回功能。为此,我创建了一个新函数,如下所示 -

CREATE FUNCTION `insertChild`(`nodeId` INT, `newNodeName` INT)
    RETURNS INT
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN

    Rollback;

START TRANSACTION;

    SELECT @myRight := rgt FROM item_tree WHERE item_id = nodeId;

    UPDATE item_tree SET rgt = rgt + 2 WHERE rgt >= @myRight;
    UPDATE item_tree SET lft = lft + 2 WHERE lft > @myRight;
    INSERT INTO item_tree(item_name, lft, rgt) VALUES(newNodeName, @myRight , @myRight + 1);

    RETURN (SELECT (COUNT(parent.item_name) - 1) AS depth FROM item_tree AS node,
        item_tree AS parent
    WHERE node.item_id = last_insert_id() AND 
    node.lft BETWEEN parent.lft AND parent.rgt 
    GROUP BY node.item_name
    ORDER BY node.lft);

COMMIT;

END

但是,这是行不通的。它正在返回 SQL 错误 (1415):不允许从函数返回结果集。

这里有什么问题?

提前致谢!

最佳答案

我改变了它返回的方式。在变量中设置计数并返回它。请检查下面更新的代码

CREATE FUNCTION `insertChild`(`nodeId` INT, `newNodeName` INT)
    RETURNS INT
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN

    Rollback;

START TRANSACTION;

    SELECT @myRight := rgt FROM item_tree WHERE item_id = nodeId;

    UPDATE item_tree SET rgt = rgt + 2 WHERE rgt >= @myRight;
    UPDATE item_tree SET lft = lft + 2 WHERE lft > @myRight;
    INSERT INTO item_tree(item_name, lft, rgt) VALUES(newNodeName, @myRight , @myRight + 1);

    SELECT @myCount := (COUNT(parent.item_name) - 1) AS depth FROM item_tree AS node,
        item_tree AS parent
    WHERE node.item_id = last_insert_id() AND 
    node.lft BETWEEN parent.lft AND parent.rgt 
    GROUP BY node.item_name
    ORDER BY node.lft;

    RETURN @myCount;

COMMIT;

END

关于mysql - 无法创建返回某些值的存储例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34897666/

相关文章:

mysql - 根据 MySQL 中的标准求和值

mysql - 如何在 Windows 操作系统中导入大型数据库并跟踪其进度

mysql - SQL如何正确地进行外部连接

mysql - 连接/合并两个表,即兴/组成 "missing"条目

使用 IN 和列表的 SQL 查询非常慢

sql - 在关系数据库中存储科学数据

java - 将数千行插入 mysql 数据库的最快方法?

MySQL对列的元素求和

sql - 如何将sql整数查询结果限制为<=1

sql - 使用WITH子句插入表在postgres中不起作用