Mysql (5.1.41) динамический SQL в вопросе о хранимых процедурах - PullRequest
1 голос
/ 13 декабря 2010

У меня есть хранимая процедура, которая заполняет временную таблицу.Временная таблица заполняется с использованием нескольких динамических SQL-операторов (в ней есть предложение «с» & «между»).Я выполняю этот SQL внутри моей хранимой процедуры, используя:

set @sql = concat("insert into my_temp select * from my_table where my_date between ", date1, " and ", date2)
PREPARE stmt1 FROM @sql;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;

/* more prepared dynamic statements */

Проблема в том, что мои драйверные жалобы возникают, как только он встречает первый оператор EXECUTE, очевидно, он думает, что MySQL пытается вернуть набор результатов из хранимой процедуры,Так ведет себя mysql, когда дело доходит до динамического sqls в хранимых процедурах?

Я получаю эту ошибку от драйвера ruby ​​/ rails / mysql2 -

Mysql2::Error: PROCEDURE my_db.sp_special_customers can't return a result set in the given context:

По сути, драйвер не поддерживает возвращаемый результат-находит от хранимой процедуры, что нормально.И это не проблема, проблема для меня в том, почему мой драйвер думает, что EXECUTE stmt1 означает, что возвращается набор результатов?

Есть ли способ в Mysql исправить это?

1 Ответ

0 голосов
/ 13 декабря 2010

Посмотрите на: http://dev.mysql.com/doc/refman/5.0/en/stored-program-restrictions.html

В частности: «Хранимые подпрограммы не могут содержать произвольные операторы SQL. Следующие операторы недопустимы:«

Они не допускают «EXECUTE»в хранимой процедуре.Однако вы можете использовать подготовленные операторы, если используете mysql 5.x.Это может быть жизнеспособной альтернативой, в зависимости от того, чего вы пытаетесь достичь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...