[MySQL Stored Proc] Передать имя таблицы как параметр

Fragaria

Подскажите, как мне сделать так, чтобы вместо имени таблицы в SQL-запросе подставлялось переданное как параметр значение?
Хочется что-то типа этого:
SELECT * FROM `CONCAT(prefix,"table")` LIMIT 1

где как раз CONCAT(prefix,"table") собирает имя таблицы из константы и параметра.

pitrik2

обычно в СУБД такое сделать нельзя
в mysql конечно может быть исключение, но подозреваю что вряд ли

Boris1980

В Oracle есть конструкция "execute immediate". Возможно, есть аналог в MySQL Stored Proc.

0000

Не ожидал от тебя такого увидеть. В Оракл это несколькими способами можно сделать (вернуть набор значений с таблицы).

pitrik2

В Оракл это несколькими способами можно сделать (вернуть набор значений с таблицы).
кроме EXECUTE IMMEDIATE (DBMS_SQL) не знаю способов :(
в DB2 есть похожее, но там стоко извратов, что проще это не использовать

0000

1. Вернуть Ref_Cursor открытый с использованием Open For
2. Пакет DBMS_SQL
execute immediate не из пакета DBMS_SQL если что.

pitrik2

о
нагуглил
http://rpbouman.blogspot.com/2005/11/mysql-5-prepared-statem...

mysql> set @table_name := 'mytable';
Query OK, 0 rows affected (0.02 sec)

mysql> set @sql_text:=concat('create table ',@table_name,'(id int unsigned)');
Query OK, 0 rows affected (0.00 sec)

pitrik2

execute immediate не из пакета DBMS_SQL если что.
если что, то это одно и то же
execute immediate - это конструкция, типа синтаксический сахар для вызова DBMS_SQL

0000

:shocked:
Спорить не буду. DBMS_SQL использовал один раз (переписывал код, где он был)... но че то мне кажется это разные вещи.

pitrik2

1. Вернуть Ref_Cursor открытый с использованием Open For
ты крут :)

Fragaria

Круто, спасибо.
Но уже не понадобилось =( К сожалению, или ODBC с mysql криво работает, или ENVOX с ODBC криво работает, но в итоге принять данные от хранимой процедуры не получилось. Так что будем по старинке, SQL-запросы вызывать ручками.
Оставить комментарий
Имя или ник:
Комментарий: