【问题标题】:Assigning a SQL result to variable from prepared statement in MySQL将 SQL 结果分配给 MySQL 中准备好的语句中的变量
【发布时间】:2013-11-14 00:10:36
【问题描述】:

我正在 MySQL 中创建一个存储过程,需要将 SQL 查询的结果分配给一个变量。问题是,为了创建 SELECT 语句,我必须使用 CONCAT() 函数,因为我正在传递参数。

看来您不能在 CONCAT 函数中使用变量。关于如何实现这一目标的任何想法?我正在尝试编写的程序如下:

DELIMITER //
CREATE PROCEDURE `my_proc` (IN tbl VARCHAR(20), IN col VARCHAR(20), IN id INT)
  BEGIN
    DECLARE @myval VARCHAR(100);

    SET @t1 =CONCAT('SELECT ',col,' FROM ',tbl,' INTO @myval WHERE id = ',id );
    PREPARE stmt1 FROM @t1;
    EXECUTE stmt1;
    DEALLOCATE PREPARE stmt1;
END //

执行此操作会给我一个 SQL 语法错误。

【问题讨论】:

  • 哪一行报错?
  • 您正在设置@t1,但您声明了@myval。对吗?
  • 这里是错误:#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@myval VARCHAR(100); SET @t1 =CONCAT('SELECT ',col,' FROM ',tbl,' INTO @myv' at line 3)
  • @acfrancis 是的,这是正确的。我想将结果设置为@myval@t1 只是 select 语句的字符串。
  • 是的,但您仍然需要声明@t1 不是吗?

标签: mysql sql stored-procedures


【解决方案1】:

问题出在下面一行:

...
-- SET @t1 = CONCAT('SELECT ',col,' FROM ',tbl,' INTO @myval WHERE id = ',id );
SET @t1 = CONCAT('SELECT ', col, ' INTO @myval FROM ', tbl, ' WHERE id = ', id);
...

查看文档:13.2.9.1. SELECT ... INTO Syntax

这是SQL Fiddle 的示例。

重要的是指出9.4. User-Defined Variables(@t1 和@myval)和13.6.4.1. Local Variable Syntax DECLARE(可能是:myval 和 t1)之间的区别是不同的变量,因此,没有必要声明:

-- DECLARE @myval VARCHAR (100);

【讨论】:

  • 就是这个!订单混乱了。谢谢!
猜你喜欢
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 2017-10-17
  • 2015-02-21
  • 2016-05-22
  • 2014-02-14
  • 2021-08-02
  • 1970-01-01
相关资源
最近更新 更多