【问题标题】:MySQL How to get results after PREPARE and EXECUTE in Stored Procedure?MySQL如何在存储过程中准备和执行后获得结果?
【发布时间】:2011-10-22 15:59:54
【问题描述】:

我当前的代码是:

DELIMITER \\

CREATE PROCEDURE sample (IN _car VARCHAR(15))
    BEGIN
        DECLARE _a INTEGER;
        SET @s = CONCAT('SELECT COUNT(*) FROM train WHERE ', _car, '<=0;');
        PREPARE stmt1 FROM @s;
        EXECUTE stmt1;
        DEALLOCATE PREPARE stmt1;

END\\

但我想将 SELECT 语句的答案捕获到我的 _a 变量中。

我尝试将我的代码更改为

SET @s = CONCAT('SELECT COUNT(*) INTO', _a,' FROM train WHERE ', _car, '<=0;');

但这没有用。

请帮忙?

解决了!

DELIMITER \\

CREATE PROCEDURE sample (IN _car VARCHAR(15))
    BEGIN
        DECLARE _a INTEGER;
        SET @var = NULL;
        SET @s = CONCAT('SELECT COUNT(*) INTO @var FROM train WHERE ', _car, '<=0;');
        PREPARE stmt1 FROM @s;
        EXECUTE stmt1;
        SELECT @var;
        DEALLOCATE PREPARE stmt1;
END\\

:D

【问题讨论】:

  • 你为什么不在存储过程中简单地写SELECT COUNT(*) FROM train WHERE _car &lt;=0;?

标签: mysql variables variable-assignment execute procedures


【解决方案1】:

如here 所述,您需要在原始语句声明中包含变量赋值。所以你的陈述会是这样的:

SELECT COUNT(*) FROM train WHERE ?<=0 INTO _a

然后你会执行它:

EXECUTE stmt1 using _car;

并通过以下方式获得结果:

select _a;

让我知道它是否有效。

【讨论】:

  • 它不起作用:错误代码:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 7 行的“_car”附近使用正确的语法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-24
  • 2017-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-09
  • 2012-05-29
相关资源
最近更新 更多