|
|
|
| есть стандарт по синтаксису select (вот его часть):
SELECT ...
[FROM table_references
[PROCEDURE procedure_name(argument_list)]]
но почему не работает следующая конструкция:
select * from procedure sp_test();
P.S. процедура такая
CREATE PROCEDURE `sp_test`()
BEGIN
select * from test;
END | |
|
|
|
|
|
|
|
для: 703370
(25.10.2006 в 19:51)
| | Здесь более целесообразно использовать вложенные запросы
select * from (select * from test);
|
на худой конец представления (view). | |
|
|
|
|
|
|
|
для: cheops
(25.10.2006 в 22:31)
| | хорошо, наверно я не неправильно поставил вопрос:
- мы имеем хранимую процедуру (любую)
- для ее вызова внутри хранимой процедуры или функции (в функции возможно только
при условии если не возвращается рекордсет) мы пишем call имя_процедуры:
но при таком раскладе мы не можем получить рекордсет (как в MSSQL) для
дальнейшей работы с ним и тем более не можем использовать в курсорах
описанный выше синтаксис из первоисточника как бы позволяет обходить эти
ограничения, но по факту он не работает либо я его неправильно использую его
и может вы знаете почему этот синтаксис не работает и использовал
ли я его правильно ??? | |
|
|
|
|
|
|
|
для: 703370
(26.10.2006 в 17:33)
| | Для вызова в запросе необходимо создавать хранимую функцию (function вместо procedure), хранимая процедура в MySQL вызывается при помощи ключевого слова CALL. | |
|
|
|
|
|
|
|
для: cheops
(26.10.2006 в 21:16)
| | Согласен, вызов select my_func_name(); действительно запустит
хранимую функцию, но эта функция не сможет вернуть таблицу
которую мы могли бы использовать дальше в запросах или
курсорах
Есть ли вариант получить результирующий рекордсет не
создавая медленных временных таблиц ??? Если нет, то можно
ли давать динамические имена этим временным таблицам (для каждой сессии
например такого рода tmp_table+my_session_id+uuid()) ??? | |
|
|
|