我想使用存储过程来定义select语句的IN子句。这是我正在尝试做的(简化版):
SELECT * FROM myTable WHERE columnName IN ( CALL myStoredProc )
myStoredProc
在数据库中执行一些复杂的逻辑,并返回columnName
的可能匹配值列表。上面的陈述显然不起作用。 select语句可以在另一个存储的prodecure中执行,如果这会产生影响。
这在mySQL中完全可以吗?
答案 0 :(得分:0)
您当前的存储过程有哪些返回类型?你说的是“列表”,所以TEXT?
也许有一种更简单的方法,但你能做的一件事(在另一个存储过程中)是建立另一个查询。
要做到这一点,我们需要解决MySQL的两个限制:a)要在存储过程中执行动态SQL,它需要是一个预准备语句。 b)准备语句只能由用户变量创建。所以完整的SQL是:
SET @the_list = myStoredProc();
SET @the_query = CONCAT('SELECT * FROM myTable WHERE columnName IN (' , @the_list , ')');
PREPARE the_statement FROM @the_query;
EXECUTE the_statement;
如果您正在讨论从存储的例程返回结果集然后将其用作表,那是不可能的。您需要创建一个临时表来解决this limitation。