MySQL: одна хранимая процедура для нескольких таблиц - PullRequest
0 голосов
/ 23 июня 2011

Мне нужно выполнить одну и ту же процедуру для нескольких таблиц в моей БД.Проблема состоит в том, что эта процедура содержит следующую строку:

DECLARE tableIt CURSOR FOR select id from table where column=inputParam ;

table - это таблица, с которой работает процедура.И я не могу найти способ сделать это имя таблицы динамическим, то есть прочитать его из входного параметра.

Сейчас у меня есть 8 различных процедур (по одной для каждой таблицы), которые отличаются друг от другатолько одним словом (название таблицы).Это действительно боль, так как мне приходится каждый раз вносить каждое изменение в процедуру.

Можно ли параметризовать оператор select для CURSOR, чтобы у меня была только одна процедура ??

1 Ответ

0 голосов
/ 23 июня 2011

Динамические курсоры не поддерживаются в Mysql. http://dev.mysql.com/doc/refman/5.1/en/cursors.html

Вы можете обойти это

http://forums.mysql.com/read.php?98,133197,149099#msg-149099

"DROP VIEW ЕСЛИ СУЩЕСТВУЕТ v1;

SET @ stmt_text = CONCAT ("CREATE VIEW v1 AS SELECT c_text FROM", t_name);

ПОДГОТОВИТЬ STMT ОТ @stmt_text;

EXECUTE stmt;

НАЧАТЬ

ОБЪЯВИТЬ v_text VARCHAR (45);

ОБЪЯВЛЕНИЕ сделано INT ПО УМОЛЧАНИЮ 0;

ОБЪЯВИТЬ c курсор для SELECT c_text FROM v1; "

...