MySQL 5 stored procedures - вопрос чайника

psion

Новичок
MySQL 5 stored procedures - вопрос чайника

С процедурами не сталкивался, но, поставив mysql5 (вместе с 4.0 :-р), решил все-таки поиграться.

Запросы:
mysql>delimiter $

mysql> create procedure test_p(IN tbl_param varchar(20)) BEGIN select * from tbl_param order by id; END$

mysql> call test_p('test')$
ERROR 1146 (42S02): Table 'test.tbl_param' doesn't exist

В чем грабли? В документации никаких разъяснений не нашел =\
 

psion

Новичок
а как-нить вообще можно передать имя таблицы как параметр?
 

alexhemp

Новичок
Это никому не нужно. А если нужно - значит неправильный дизайн БД.
 

psion

Новичок
Почему это не нужно?
Простой пример.
У меня в БД есть несколько таблиц, содержащих "деревья" (поля id и parent_id). Почему бы не написать функцию или процедуру, которая находит всех родителей нужного узла таблицы, передаваемой как параметр в эту самую процедуру? Не писать же 10 одинаковых процедур?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: alexhemp
Это никому не нужно.
Как обычно, если фича N не реализована в MySQL, значит она "никому не нужна". :D

Так, в частности, известно, что в своё время никому не нужны были транзакции, внешние ключи, да и сами хранимые процедуры.

Зато когда в MySQL реализуют динамические запросы в процедурах, это будет "мощный прорыв в ын-тыр-прайз". :D
 

Steamroller

Новичок
Не писать же 10 одинаковых процедур?
Ну ты же создал 10 одинаковых таблиц, и у тебя это не вызвало духовного неприятия. Что мешает теперь 10 одинаковых процедур создать? :)
 

Апельсин

Оранжевое создание
psion, можно. Просто надо формировать запрос динамически. Потом выполнять. А не так как ты это делаешь.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: Апельсин
Просто надо формировать запрос динамически.
А, то есть динамические запросы в процедурах всё-таки есть. Наезд снимается. :)
 

psion

Новичок
Апельсин, а как это - формировать динамически и выполнять?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Генерируешь внутри процедуры строку, содержащую твой запрос. Прогоняешь строку, видимо, через PREPARE, выполняешь через EXECUTE. Если чё не так, Апельсин поправит.
 
Сверху