【问题标题】:MySQL stored function returning object instead of integerMySQL存储函数返回对象而不是整数
【发布时间】:2016-02-01 20:06:08
【问题描述】:

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

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

【问题讨论】:

  • 我准确地说,当我使用 LAST_INSERT_ID() 返回 room_id 时,它可以工作,当我从 SELECT 语句中获取 room_id 时会出现问题。
  • @rahpuser:SELECT 语句中的into 关键字不是创建新表。这不是问题。
  • 语法似乎没有任何问题,除了缺少的部分...CREATE FUNCTION get_room_id(in_user_uid VARCHAR(40), in_site_domain VARCHAR(40), in_seller_type VARCHAR(30), in_seller_id INT)。 (未显示的)查询 select get_room_id('1344...','mydomain.com','pro','5') 返回的是正常结果集。除了调用该函数的查询结果中不幸的列名之外,我认为您的问题与该函数没有任何关系。为查询中的列分配一个列别名,以获得“更简单”的结果集。
  • 另外,尝试使用更简单的查询测试您的代码,而不调用函数,例如SELECT 42 AS answer 你会发现问题与函数无关。作为一个更迟钝的测试,尝试为列分配一个复杂的别名。SELECT 42 AS `myfunction('fee','fi',fo','fum')` 将结果与查询返回的结果进行比较。
  • 好的,谢谢,但我的问题是,使用 SELECT 我有一个记录集,我在 ELSE 中得到一个带有 LAST_INSERT_ID 的整数。我只想要整数值。不可能吗?

标签: mysql node.js stored-functions


【解决方案1】:

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

select get_room_id(...) as room_id

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

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

【讨论】:

  • +1 建议添加列别名以“简化”结果集中的列名。
  • 我想要的是没有记录集(对象)...我想要函数声明中预期的整数。不可能?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 2013-12-01
相关资源
最近更新 更多