Переменная как имя таблицы в запросе

Модераторы: kdv, CyberMax

Ответить
4udak
Сообщения: 3
Зарегистрирован: 23 ноя 2007, 16:34

Переменная как имя таблицы в запросе

Сообщение 4udak » 23 ноя 2007, 16:58

Люди добрые, подскажите кто занет - как в хранимой процедуре (тригере) реализовать подстановку имени таблицы в запрос:
update <tbl_name> set и т.д.
дело в том, что <tbl_name> хранится в символьном поле другой таблицы, но вариант с переменной в которую считывается это название и потом переменаня вставляется в запрос как имя таблицы не проходит :(

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 23 ноя 2007, 17:14

Вариант 1. Запрос формировать на клиенте.
Вариант 2. if tbl_name = 'tbl1' then update tbl1 set ...; else if tbl_name = ...
Вариант 3. В FB2 и выше - Execute Statement. Но лучше так не делать. Только если другого выхода нет.

belov-evgenii
Сообщения: 52
Зарегистрирован: 28 сен 2007, 10:19

Сообщение belov-evgenii » 24 ноя 2007, 10:44

WildSery писал(а):В FB2 и выше - Execute Statement
FB 1.5 и выше

4udak
Сообщения: 3
Зарегистрирован: 23 ноя 2007, 16:34

Сообщение 4udak » 26 ноя 2007, 15:32

WildSery писал(а):Вариант 1. Запрос формировать на клиенте.
Вариант 2. if tbl_name = 'tbl1' then update tbl1 set ...; else if tbl_name = ...
Вариант 3. В FB2 и выше - Execute Statement. Но лучше так не делать. Только если другого выхода нет.
Варианты 1 и 2 однозначно не подходят. А вот насчет 3 я чей-то не понял. Объясни как для ламера, плз :oops:

Attid
Спец
Сообщения: 377
Зарегистрирован: 14 ноя 2006, 09:58

Сообщение Attid » 26 ноя 2007, 15:51

читай тут :
"c:\Program Files\Firebird\Firebird_2_0\doc\sql.extensions\README.execute_statement.txt"

4udak
Сообщения: 3
Зарегистрирован: 23 ноя 2007, 16:34

Сообщение 4udak » 27 ноя 2007, 13:27

Всем огромное спасибо! Вариант №3 получился.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 27 ноя 2007, 13:40

только потом не жалуйся.

ODIN
Сообщения: 13
Зарегистрирован: 07 сен 2005, 02:51

Сообщение ODIN » 03 дек 2007, 16:06

а в чём возможна проблема при третьем варианте?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 03 дек 2007, 16:18

а в чём возможна проблема при третьем варианте?
1. сложность кода при попытке понять его через месяц после написания
2. сложность отладки
3. плохая производительность.

начинающие на execute statement лезут как мухи на мед. а это оказывается вовсе не мед. То есть, я не против ES, но его надо использовать с умом. Что у начинающих обычно отсутствует по крайней мере в применении ES (ничего личного).

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 05 дек 2007, 10:38

4. Права доступа.

ODIN
Сообщения: 13
Зарегистрирован: 07 сен 2005, 02:51

Сообщение ODIN » 09 дек 2007, 16:17

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

в первом варианте нужно переписывать и компилировать клиентскую часть

во втором нужно дописывать хранимую процедуру

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 09 дек 2007, 18:44

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

Ответить