我在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语法错误。
答案 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);