【发布时间】:2014-05-28 02:55:42
【问题描述】:
“选择进入”似乎不适用于以下代码。 我可以从 sql 查询的“select 子句”中获取数据,但是使用测试过程代码,它只为每个 out 参数返回空值。 (应该返回一条记录)
谁能告诉我哪里做错了?
操作系统:Mac OSX DBM:MySQL 工作台 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;
【问题讨论】:
-
不用
prepare statement直接调用 -
@Rahul,我也尝试过,但结果相同。
CALLPOLL_NEW_MESSAGE(@DEVICEID, @ORGID, @MSGDATE, @MSGTIME, @BODY, @TOKEN);SELECT @DEVICEID, @ORGID, @MSGDATE, @MSGTIME, @BODY, @TOKEN;
标签: mysql stored-procedures mysql-workbench