Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: select from procedure
 
 автор: 703370   (25.10.2006 в 19:51)   письмо автору
 
 

есть стандарт по синтаксису 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

   
 
 автор: cheops   (25.10.2006 в 22:31)   письмо автору
 
   для: 703370   (25.10.2006 в 19:51)
 

Здесь более целесообразно использовать вложенные запросы
select * from (select * from test);

на худой конец представления (view).

   
 
 автор: 703370   (26.10.2006 в 17:33)   письмо автору
 
   для: cheops   (25.10.2006 в 22:31)
 

хорошо, наверно я не неправильно поставил вопрос:

- мы имеем хранимую процедуру (любую)
- для ее вызова внутри хранимой процедуры или функции (в функции возможно только
при условии если не возвращается рекордсет) мы пишем call имя_процедуры:

но при таком раскладе мы не можем получить рекордсет (как в MSSQL) для
дальнейшей работы с ним и тем более не можем использовать в курсорах

описанный выше синтаксис из первоисточника как бы позволяет обходить эти
ограничения, но по факту он не работает либо я его неправильно использую его

и может вы знаете почему этот синтаксис не работает и использовал
ли я его правильно ???

   
 
 автор: cheops   (26.10.2006 в 21:16)   письмо автору
 
   для: 703370   (26.10.2006 в 17:33)
 

Для вызова в запросе необходимо создавать хранимую функцию (function вместо procedure), хранимая процедура в MySQL вызывается при помощи ключевого слова CALL.

   
 
 автор: 703370   (31.10.2006 в 11:37)   письмо автору
 
   для: cheops   (26.10.2006 в 21:16)
 

Согласен, вызов select my_func_name(); действительно запустит
хранимую функцию, но эта функция не сможет вернуть таблицу
которую мы могли бы использовать дальше в запросах или
курсорах
Есть ли вариант получить результирующий рекордсет не
создавая медленных временных таблиц ??? Если нет, то можно
ли давать динамические имена этим временным таблицам (для каждой сессии
например такого рода tmp_table+my_session_id+uuid()) ???

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования