有没有一种方法可以将整个子查询作为参数传递给MySQL函数并在一定条件下执行它?像这样的东西(但不太坏)。。

delimiter //
create procedure myFunction (mySubquery)
begin
    if (true) then
        execute mySubquery;
    end if;
    /*rest of the action*/
end //
delimiter ;

最佳答案

您可以将查询作为一个好的ol'string(也称为VARCHAR)传递,并从中prepare a statement

CREATE PROCEDURE proc (param VARCHAR(100))
BEGIN
    SET @query = param;
    PREPARE stmt FROM @query;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    SET @query = NULL;
END;

-- later on...
CALL proc('SELECT 1');

注意:由于“在存储程序上下文中准备的语句不能引用(…)函数参数”,因此需要难看的解决方法。(即不允许SET @query = param;)。讨厌。
您应该在这样的过程中添加一个error handler,因为一个断开的查询可能(最终将根据Moore定律)被作为参数提供。你的程序应该准备好优雅地处理这个案子。

09-17 21:13
查看更多