我有一个有效的存储过程:
call my_procedure('A,B,C,D');
我想用另一个表的子查询中的列表填充A,B,C,例如:
call my_procedure(
SELECT group_concat(letters) FROM table WHERE type = 'some_type')
);
可能?或者我做错了吗?
答案 0 :(得分:2)
SELECT my_function(group_concat(letters)) FROM table WHERE type = 'some_type';
答案 1 :(得分:2)
您可以将值分配给用户定义的变量,然后将该变量传递给函数。
例如:
SELECT group_concat(letters)
INTO @foo
FROM table
WHERE type = 'some_type';
call my_function(@foo);
答案 2 :(得分: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 |
+--------------------+