不能对列名或表名的过程使用参数。相反,您需要使用这些值准备一个语句并执行它。例如:
BEGIN
DECLARE uValue INT(11);
SET @sql = CONCAT('SELECT MAX(', uField, ') INTO uValue FROM ', uTable);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
RETURN uValue;
END
注意,不能在函数中使用动态SQL,因此需要将其转换为
uValue
一个
OUT
参数,即。
CREATE PROCEDURE DMax(
IN uField VARCHAR(100),
IN uTable VARCHAR(100),
OUT uValue <appropriate type>
)
BEGIN
DECLARE uValue INT(11);
SET @sql = CONCAT('SELECT MAX(', uField, ') INTO uValue FROM ', uTable);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
CALL DMax('table1', 'column1', @DMax)
然后你就可以
SELECT @DMax