3

我有一个有效的存储过程:

call my_procedure('A,B,C,D');

我想用另一个表的子查询中的列表填充 A、B、C,例如:

call my_procedure(
  SELECT group_concat(letters) FROM table WHERE type = 'some_type')
);

可能的?还是我做错了?

4

3 回答 3

2

您可以将值分配给用户定义的变量,然后将该变量传递给函数。

例如:

SELECT group_concat(letters) 
INTO @foo
FROM table 
WHERE type = 'some_type';

call my_function(@foo);
于 2013-10-09T18:22:17.450 回答
2

是的,您可以将字符串传递给作为子查询结果返回的过程。

但不是一个简单的查询:

mysql> create procedure foo (in s text) begin select s; end !!

mysql> call foo( select group_concat(user) from mysql.user );
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 
'select group_concat(user) from mysql.user )' at line 1

如果将查询括在括号中,则将其计为标量子查询,即绑定返回一行一列的子查询:

mysql> call foo( (select group_concat(user) from mysql.user) );
+--------------------+
| s                  |
+--------------------+
| root,root,bill,xbm |
+--------------------+
于 2013-10-10T17:41:23.850 回答
2
SELECT my_function(group_concat(letters)) FROM table WHERE type = 'some_type';
于 2013-10-09T17:33:41.610 回答