“选择进入”似乎不适用于以下代码。 我可以从 sql 查询的“select 子句”获取数据,但使用测试过程代码,它只为每个输出参数返回 null 值。 (应返回一条记录)
谁能告诉我哪里做错了?
操作系统:Mac OSX DBM:MySQL WorkBench 6.1 MySQL:5.6.13
过程代码
DELIMITER $$
CREATE DEFINER= PROCEDURE `POLL_NEW_MESSAGE`(OUT DEVICEID INT, OUT ORGID INT, OUT MSGDATE VARCHAR(8), OUT MSGTIME VARCHAR(6), OUT BODY TEXT, OUT TOKEN VARCHAR(64))
BEGIN
DECLARE DEVICEID INT DEFAULT -1;
DECLARE ORGID INT DEFAULT -1;
DECLARE MSGDATE VARCHAR(8) DEFAULT NULL;
DECLARE MSGTIME VARCHAR(6) DEFAULT NULL;
DECLARE BODY TEXT DEFAULT NULL;
DECLARE TOKEN VARCHAR(64) DEFAULT NULL;
DECLARE UPDATED INT DEFAULT 0;
SELECT msg.device_id, msg.org_id, msg.msg_date, msg.msg_time, msg.body
INTO DEVICEID, ORGID, MSGDATE, MSGTIME, BODY
FROM pm_msg msg, pm_org org
WHERE msg.status = '0'
AND org.org_id = msg.org_id
AND org.status = 'G';
END
测试代码1
PREPARE s FROM ' CALL `POLL_NEW_MESSAGE`(@DEVICEID, @ORGID, @MSGDATE, @MSGTIME, @BODY, @TOKEN)';
execute s;
SELECT @DEVICEID, @ORGID, @MSGDATE, @MSGTIME, @BODY, @TOKEN;
测试代码2
CALL `POLL_NEW_MESSAGE`(@DEVICEID, @ORGID, @MSGDATE, @MSGTIME, @BODY, @TOKEN);SELECT @DEVICEID, @ORGID, @MSGDATE, @MSGTIME, @BODY, @TOKEN;
最佳答案
在过程中使用相同的变量名称声明输出参数会导致问题。 一旦我删除了所有已用作过程输出参数的变量声明,它就会按预期工作。
固定代码
DELIMITER $$
CREATE DEFINER= PROCEDURE `POLL_NEW_MESSAGE`(OUT DEVICEID INT, OUT ORGID INT, OUT MSGDATE VARCHAR(8), OUT MSGTIME VARCHAR(6), OUT BODY TEXT)
BEGIN
SELECT msg.device_id, msg.org_id, msg.msg_date, msg.msg_time, msg.body
INTO DEVICEID, ORGID, MSGDATE, MSGTIME, BODY
FROM pm_msg msg, pm_org org
WHERE msg.status = '0'
AND org.org_id = msg.org_id
AND org.status = 'G'
LIMIT 1;
END
关于MySQL:获取所有过程输出参数为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23902085/