在MySql函数中使用查询参数

问题描述 投票:0回答:1

我已在phpMyAdmin中创建了一个函数,如此屏幕截图所示screenshot

当我尝试像这样使用它时:

Select DMax ("id","customers")

我收到错误消息#1305,说uTable不存在。这可能是一些基本的语法问题,因为sql语句中的uTable是按字面意义使用的,而不是被视为参数。那我该如何运作呢?

mysql phpmyadmin
1个回答
0
投票

您不能在过程中使用参数来获取列名或表名。相反,您需要使用这些值准备一条语句并执行该语句。例如:

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,因此您需要使用uValueOUT参数将其转换为存储过程,例如

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

(是的,这是巨大的痛苦)

© www.soinside.com 2019 - 2024. All rights reserved.