3

我正在 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 语法错误。

4

1 回答 1

3

问题是以下行:

...
-- 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 语法

这是一个带有示例的SQL Fiddle 。

指出9.4之间的区别很重要。用户定义的变量(@t1 和 @myval)和13.6.4.1。局部变量语法 DECLARE(可能是:myval 和 t1)是不同的变量,因此,没有必要声明:

-- DECLARE @myval VARCHAR (100);
于 2013-11-14T06:39:10.087 回答