MySQL 存储函数返回对象而不是整数
MySQL stored function returning object instead of integer
我需要 mySQl 中的一个功能 returns 我和 Id 形成一个聊天室 table。这是我的函数 "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
您的代码可能 return 一个不错的对象 { 'room_id' : 1 }
,在您的代码中应该很容易操作。
从Node的角度来看,SELECT return不仅仅是一个数据值。它还 return 是所选列的名称,所有内容都打包到一个对象中。为笨拙的列使用别名将帮助您轻松使用对象。
我需要 mySQl 中的一个功能 returns 我和 Id 形成一个聊天室 table。这是我的函数 "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
您的代码可能 return 一个不错的对象 { 'room_id' : 1 }
,在您的代码中应该很容易操作。
从Node的角度来看,SELECT return不仅仅是一个数据值。它还 return 是所选列的名称,所有内容都打包到一个对象中。为笨拙的列使用别名将帮助您轻松使用对象。