mysql - 如何将子查询作为参数传递给 MySQL 过程?

标签 mysql subquery procedure

有没有一种方法可以将整个子查询作为参数传递给我的 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; 解决方法是必需的,因为“在存储的程序上下文中准备的语句不能引用 (...) 函数参数”。 (即 PREPARE stmt FROM param; 是不允许的)。呸。

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

关于mysql - 如何将子查询作为参数传递给 MySQL 过程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18188199/

相关文章:

oracle - PL/SQL EXECUTE IMMEDIATE inside LOOP(截断模式中所有表的过程)

MySQL 过程 : If column don't exists create it

php - 无法包含 dbconenct.php

MySQL 选择范围内的值,该值不在另一个范围内

mysql - 优化缓慢的 mysql 查询

java - 在mysql数据库中多次插入

php - 如何保护本地托管网站的源代码?

MySQL 计数选择查询条件

mysql - JPA/Hibernate/mySql 中没有持久化数据

MySQL 子查询与 LIMIT 与 JOIN