MySQL 存储函数返回对象而不是整数

标签 mysql node.js stored-functions

我需要 mySQl 中的一个函数,它可以从聊天室表格中返回一个 Id。这是我的函数“get_room_id”:

BEGIN

    DECLARE room_id INT(11);
    DECLARE user_id INT(11);

    SET room_id = 0;
    SET user_id = get_user_id(in_user_uid);

    SELECT `id` INTO room_id FROM `room`
    WHERE `user_id`     = user_id
        AND `type`      = in_seller_type
        AND `site`      = in_site_domain
        AND `sellerid`  = in_seller_id
    LIMIT 1;

    IF (room_id > 0) THEN
        RETURN room_id;

    ELSE
        INSERT INTO `room` (`user_id`, `sellerid`, `site`, `type`) VALUES (user_id, in_seller_id, in_site_domain, in_seller_type);
        SET room_id = LAST_INSERT_ID();

        INSERT INTO `participant` (`user_id`, `room_id`, `joined`) VALUES (user_id, room_id, NOW());
        RETURN room_id; 

    END IF;
END

在我的 NodeJS 代码中返回这个对象:

[ RowDataPacket {
'get_room_id(\'13442692f82fdb4cf91919b1e3378fe4b79ec1bc\', \'mydomain.com\', \'pro\', \'5\')': 1 } ]

而不是值为 1 的 INT(11)(我们可以在对象末尾看到它)。

有人有解决办法吗? 我的语法有误吗?

最佳答案

如果您这样调用您的函数(在 SQL 中):

select get_room_id(...) as room_id

您的代码可能会返回一个不错的对象 { 'room_id' : 1 },它应该很容易在您的代码中操作。

从 Node 的角度来看,SELECT 返回的不仅仅是一个数据值。它还返回所选列的名称,所有内容都打包到一个对象中。为笨拙的列使用别名将帮助您获得易于使用的对象。

关于MySQL 存储函数返回对象而不是整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35139353/

相关文章:

mysql_escape_string() 函数已弃用 使用 mysql_real_escape_string() Codeigniter

MySQL用户创建日期、修改日期

javascript - 如何在 Nestjs 中扩展多个 dto 类

mysql - 我可以将unit关键字保存到MYSQL中的变量中吗?

MySQL 将 JOIN 语句转换为存储过程或函数?

MySQL:如果多个值不存在,则插入多个值,但需要多列检查

php - 已超出数据库中的 'max_questions' 资源

node.js - Powershell 检测何时添加或删除设备

javascript - 错误 '\" Node .\bin\www\"' 无法被 gulp 识别为内部或外部命令、可操作程序或批处理文件

mysql - 查看 MySQL 中的存储过程/函数定义