Модераторы: 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. Но лучше так не делать. Только если другого выхода нет.
-
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 я чей-то не понял. Объясни как для ламера, плз
-
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 (ничего личного).
-
ODIN
- Сообщения: 13
- Зарегистрирован: 07 сен 2005, 02:51
Сообщение
ODIN » 09 дек 2007, 16:17
зато плюс то что алгоритм в процедуре можно получить универсальный, т.е. переписывать (дописывать) процедуру ненужно будет при каком то изменении или добавлении структуры метаданных
в первом варианте нужно переписывать и компилировать клиентскую часть
во втором нужно дописывать хранимую процедуру
-
kdv
- Forum Admin
- Сообщения: 6595
- Зарегистрирован: 25 окт 2004, 18:07
Сообщение
kdv » 09 дек 2007, 18:44
зато плюс то что алгоритм в процедуре можно получить универсальный, т.е. переписывать (дописывать) процедуру ненужно будет при каком то изменении или добавлении структуры метаданных
это только кажется. ничего универсального на самом деле не бывает.