1

有没有办法可以将整个子查询作为参数传递给我的 MySQL 函数并在某个条件下执行它?像这样的东西(但故障较少)..

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

2 回答 2

3

您可以将查询作为一个好的 ol'string (aka VARCHAR) 传递并从中准备一个语句

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;解决方法,因为“在存储的程序上下文中准备的语句不能引用 (...) 函数参数”。(即PREPARE stmt FROM param;不允许)。呸。

您应该在这样的过程中添加一个错误处理程序,因为可能(根据摩尔定律,最终会;)将损坏的查询作为参数提供。您的程序应该准备好优雅地处理这种情况。

于 2013-08-12T13:33:20.683 回答
0

试试这样:

delimiter //
drop procedure if exists myFunction;
create procedure myFunction (mySubquery varchar(500))
begin
    if (true) then
        SET @mySubquery = mySubquery;
        PREPARE stmt FROM @mySubquery;
        EXECUTE stmt;
    end if;
/*rest of the action*/
end //
delimiter ;
于 2013-08-12T13:51:51.073 回答