LINUX.ORG.RU

[mysql] Передать в хранимую процедуру название таблицы

 


0

0

Это снова я. Теперь проблема в следующем: есть хранимая процедура примерно вот такого содержания:

CREATE PROCEDURE `mult`.`remove_duplicates`(IN tbl_name VARCHAR(200))
BEGIN
DECLARE sites_cursor CURSOR FOR SELECT SiteId FROM tbl_name
GROUP BY SiteId HAVING COUNT(*) > 1;
..........
бла-бла-бла
..........
END

Внимание, вопрос: как мне передать имя таблицы в курсор, чтобы mysql воспримал ее как переменную, а не как строку?

Т.к. сейчас он ругается вот так: ERROR 1146 (42S02): Table 'mult.db_name' doesn't exist

P.S. Если точно так же подставить параметр tbl_name в выражение HAVING COUNT(*) > tbl_name, то все работает...

Отвечаю самому себе: курсоры в mysql не поддерживают динамических изменений (т.е. переменных в имени таблицы, например).

Такое поведение можно имитировать с помощью views, но способ довольно извращенный=)

Кому интересно, вот: http://forge.mysql.com/tools/tool.php?id=13

Вообще жаль, что пока возможности хранимых процедур в мускуле отставляют желать лучшего. Будем ждать и юзать то, что есть.

it-partizan
() автор топика

А что, разве в каких-то базах позволительно такое делать? интересно как они тогда хранимые процедуры компилируют-оптимизируют?

// а что mysql это не позволяет это как раз странно - там особых оптимизаций хранимых процедур вроде нету...

gods-little-toy ★★★
()
Ответ на: комментарий от gods-little-toy

ты не поверишь, в других базах такое позволительно и многое другое. а мускл уг

anonymous
()
Ответ на: комментарий от it-partizan

> Но у меня по 3 процедуры и 160 таблиц!=)

Ну так никто ведь не мешает генерить их скриптом.

friday ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.