-
Есть задача, написать процедуру, которая будет выводить данные в столбцах, при этом количество столбцов будет зависеть от передаваемых процедуре параметров. Как создавать столбцы динамически?
FireBird 1.5 Dialect 3
-
см. PSQL-предложение EXECUTE STATEMENT
-
> Сергей М. © (08.05.08 12:41) [1]
Я не нашел как создавать столбец при помощи EXECUTE STATEMENT
Не могли бы вы привести пример создания одного столбца?
-
> DelphiN! © (08.05.08 12:37)
В наборах данных, как и в таблицах БД, есть поля, а не столбцы.
И ты вообще о какой процедуре ведешь речь ? О хранимой ?
-
> В наборах данных, как и в таблицах БД, есть поля, а не столбцы.Смею заметить, что в Firebird для определения атрибутов сущностей используется именно термин "столбцы", т.к. в Firebird это тоже сущность, имеющая свои свойства не только как типа хранимых данных, но и условий (ограничений), которые на эти данные накладываются. > DelphiN! © (08.05.08 12:37) >FireBird 1.5 Dialect 3
Никак. Сколько раз можно повторять: в Firebird хранимая процедура не может иметь переменное количество доменов потому, как они объявляются при создании процедуры. То есть выхода у тебя по сути три: 1) играться с метаданными "на лету", пересоздавая каждый раз процедуру перед выполнением, за что бъют по пальцам. 2) воспользоваться Firebird 2.0 и старше. Там есть конструкция EXECUTE BLOCK, подробнее - читай в документации http://firebird.name/doku.php?id=execute_block3) Подумать хорошенько над запросом к БД на предмет его выполнения при помощи тривиального SELECT.
-
> PEAKTOP © (08.05.08 19:26) [4]
> в Firebird для определения атрибутов сущностей используется > именно термин "столбцы"
Приведи, пож., ссылку на первоисточник ..
> в Firebird хранимая процедура
Автор пока нисловом не обмолвился о ХП, так что можно и еще десяток раз повторить)
-
> Сергей М, (08.05.08 19:57) [5]
Я в книгах вообще так и читал "столбцы"... хотя при создании таблицы(исторический факт, DBD, называется FIELD).. самого в оману вводило
-
> Сергей М, (08.05.08 19:57) [5] > > Приведи, пож., ссылку на первоисточник ..InterBase6.0 / langref.pdf / CREATE DOMAIN (искать на ibase.ru) Неофициальный (пока не будет выполнен до конца) перевод: http://firebird.name/doku.php?id=create_domain
-
> PEAKTOP © (09.05.08 05:33) [7]
Домен и столбец - две разные разницы
-
> PEAKTOP © (08.05.08 19:26) [4]
Никак. Сколько раз можно повторять: в Firebird хранимая процедура не может иметь переменное количество доменов потому, как они объявляются при создании процедуры.
То есть выхода у тебя по сути три: 1) играться с метаданными "на лету", пересоздавая каждый раз процедуру перед выполнением, за что бъют по пальцам. 2) воспользоваться Firebird 2.0 и старше. Там есть конструкция EXECUTE BLOCK, подробнее - читай в документации http://firebird.name/doku.php?id=execute_block 3) Подумать хорошенько над запросом к БД на предмет его выполнения при помощи тривиального SELECT.
Спасибо, за советы! Заинтересовал пункт 2 А какие последствия могут быть при переходе с FireBird 1.5 на FireBird 2.0+ и какие действия для этого необходимо выполнить. Естественно, в БД есть важные данные, и необходимо не допустить их потери
-
Backup под 1,5 - RESTORE под 2,х...если все нормально спроектировано, то последствий никаких
-
Спасибо всем за помощь!
|