2013-10-09 3 views
3

У меня есть хранимая процедура, которая работает:MySQL: Используйте оператор выбора для параметра хранимой процедуры

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

Я хочу, чтобы заполнить A, B, C со списком из подзапроса другой таблицы, например:

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

Возможно ли? Или я делаю это неправильно?

ответ

2
SELECT my_function(group_concat(letters)) FROM table WHERE type = 'some_type'; 
+0

Я обновил вопрос, чтобы отразить его на самом деле довольно сложную процедуру ... и я не думаю, что вы можете вызывать процедуры из выбора ... Извините за искажение моего вопроса. + 1 для ответа на исходный вопрос. – OliverSamson43

+0

, как только я получу достаточно репутации;) – OliverSamson43

2

Вы можете назначить значение переменной, определяемой пользователем, и передать эту переменную функции.

Например:

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

call my_function(@foo); 
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 | 
+--------------------+ 
Смежные вопросы