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

时间:2016-02-01 20:06:08

标签: 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)(我们可以在对象的末尾看到它)。

有人有解决方案吗? 我的语法错了吗?

1 个答案:

答案 0 :(得分:2)

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

select get_room_id(...) as room_id

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

从Node的角度来看,SELECT只返回一个以上的数据值。它还返回所选列的名称,并将所有内容打包到对象中。为笨拙的列使用别名将帮助您轻松使用对象。