将SQL结果分配给MySQL中预准备语句的变量

时间:2013-11-14 00:10:36

标签: mysql sql stored-procedures

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

1 个答案:

答案 0 :(得分:2)

问题在于以下几行:

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

查看文档:{​​{3}}。

以下是13.2.9.1. SELECT ... INTO Syntax的示例。

重要的是要指出SQL Fiddle(@ t1和@myval)和9.4. User-Defined Variables之间的差异(可能是:myval和t1),是不同的变量,因此,没有必要声明:

-- DECLARE @myval VARCHAR (100);