Страница 1 из 1

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

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

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

Добавлено: 24 ноя 2007, 10:44
belov-evgenii
WildSery писал(а):В FB2 и выше - Execute Statement
FB 1.5 и выше

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

Добавлено: 26 ноя 2007, 15:51
Attid
читай тут :
"c:\Program Files\Firebird\Firebird_2_0\doc\sql.extensions\README.execute_statement.txt"

Добавлено: 27 ноя 2007, 13:27
4udak
Всем огромное спасибо! Вариант №3 получился.

Добавлено: 27 ноя 2007, 13:40
kdv
только потом не жалуйся.

Добавлено: 03 дек 2007, 16:06
ODIN
а в чём возможна проблема при третьем варианте?

Добавлено: 03 дек 2007, 16:18
kdv
а в чём возможна проблема при третьем варианте?
1. сложность кода при попытке понять его через месяц после написания
2. сложность отладки
3. плохая производительность.

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

Добавлено: 05 дек 2007, 10:38
WildSery
4. Права доступа.

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

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

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

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