MySQL:获取所有过程输出参数为空

标签 mysql stored-procedures mysql-workbench

“选择进入”似乎不适用于以下代码。 我可以从 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/

相关文章:

mysql - 在哪里下载 MySQLdump.ext 比 mysqldump.exe ver 5.7.1.7 更新的版本

mysql - SQL - 连接多个表并 count()

python - 如何使用 python 脚本从我的树莓派访问 Windows 桌面上 wamp 服务器中的外部 mysql 数据库?

MySQL 删除行 ORDER BY COUNT DESC

mysql - 防止在 IF 语句中调用函数两次

sql-server - SqlServer GOTO 用于带有选择的退出过程

MySQL - 如何执行条件 WHERE 和 OR 子句查询?

java - 如何指定一次使用哪个模式?

mysql - 将UNION查询的结果保存在MYSQL存储过程的局部变量中

MySQL 服务器与 XAMPP