Py学习  »  DATABASE

在MySql函数中使用查询参数

esims • 4 年前 • 829 次点击  

screenshot .

当我试图这样使用它时:

Select DMax ("id","customers")

我说这话时出错了 uTable 不存在。这可能是一些基本的语法问题,因为 易变的 在sql语句中,按字面意思理解,而不是作为参数。那我该怎么做呢?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/56199
 
829 次点击  
文章 [ 1 ]  |  最新文章 4 年前
Nick
Reply   •   1 楼
Nick    4 年前

不能对列名或表名的过程使用参数。相反,您需要使用这些值准备一个语句并执行它。例如:

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