【问题标题】:Why is my procedure producing null result?为什么我的程序会产生空结果?
【发布时间】:2017-06-05 06:56:44
【问题描述】:

我只是创建了一个接受 2 个输入并给出 2 个输出的过程。
当我单独运行查询时,它会给我正确的输出,但是如果我尝试调用过程它会产生我 null 结果

在调用查询时:

SELECT field1, field2 
        INTO @var1, @var2
        FROM MyTable ID=? and Name=?

然后:

select  @var1, @var2;

但如果我在程序中组合相同的代码,它将为两个字段提供null

程序:

DELIMITER $$

CREATE DEFINER=`user`@`localhost` PROCEDURE `My_Proc`(
    IN `ID` INT,
    IN `Name` VARCHAR(20)
    -- OUT `result` INT,
    -- OUT `result1` INT
)
BEGIN

 set @var1 = 0;
 set @var2 = 0;

    set @query := CONCAT("SELECT
                      field1, field2 
             INTO @var1, @var2
                      FROM MyTable ID=? and Name=?");

    PREPARE stmt FROM @query;
    Execute stmt USING @Id,@Name;
    DEALLOCATE PREPARE `stmt`;

select @var1,@var2;


END

我尝试在程序外部调用select @var1,@var2;,但它也给出了空字段。


我正在使用 Mysql Workbench 6.0

【问题讨论】:

  • 从字段 1 和字段 2 中删除动态查询中的单引号,并在 id = 之前使用 where 子句?
  • @AnkitAgrawal,在实际查询中没有引用的地方,我在创建演示代码时错误地添加了。
  • 看下面我的回答

标签: mysql stored-procedures mysql-workbench


【解决方案1】:

您的程序中有一些错误已在下面删除............看看

DELIMITER $$

CREATE DEFINER=`user`@`localhost` PROCEDURE `My_Proc`(
    IN `ID` INT,
    IN `Name` VARCHAR(20)
    -- OUT `result` INT,
    -- OUT `result1` INT
)
BEGIN

 set @var1 = 0;
 set @var2 = 0;

    set @query := CONCAT("SELECT
                      field1,field2 
             INTO @var1, @var2
                      FROM MyTable where ID=? and Name=?");

    PREPARE stmt FROM @query;
    Execute stmt USING @Id,@Name;
    DEALLOCATE PREPARE stmt ;

select @var1,@var2;


END

【讨论】:

  • 谢谢。让我更改原始 Proc 并检查。
  • 再一次,'from' 在 Demo 中被遗漏了。我纠正了小错误,仍然没有结果!
  • 需要设置@id,@name
  • @P.Salmon,也尝试过这种方式,但仍然无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-29
相关资源
最近更新 更多