Конференция "Базы" » Динамическое создание столбцов процедурой на FireBird [Firebird 1.5]
 
  • DelphiN! © (08.05.08 12:37) [0]
    Есть задача, написать процедуру, которая будет выводить данные в столбцах, при этом количество столбцов будет зависеть от передаваемых процедуре параметров. Как создавать столбцы динамически?

    FireBird 1.5 Dialect 3
  • Сергей М. © (08.05.08 12:41) [1]
    см. PSQL-предложение
    EXECUTE STATEMENT

  • DelphiN! (08.05.08 13:23) [2]

    > Сергей М. ©   (08.05.08 12:41) [1]


    Я не нашел как создавать столбец при помощи EXECUTE STATEMENT

    Не могли бы вы привести пример создания одного столбца?
  • Сергей М. © (08.05.08 13:46) [3]

    > DelphiN! ©   (08.05.08 12:37)


    В наборах данных, как и в таблицах БД, есть поля, а не столбцы.

    И ты вообще о какой процедуре ведешь речь ? О хранимой ?
  • PEAKTOP © (08.05.08 19:26) [4]
    > В наборах данных, как и в таблицах БД, есть поля, а не столбцы.

    Смею заметить, что в 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_block
    3) Подумать хорошенько над запросом к БД на предмет его выполнения при помощи тривиального SELECT.
  • Сергей М, (08.05.08 19:57) [5]

    > PEAKTOP ©   (08.05.08 19:26) [4]


    > в Firebird для определения атрибутов сущностей используется
    > именно термин "столбцы"


    Приведи, пож., ссылку на первоисточник ..


    > в Firebird хранимая процедура


    Автор пока нисловом не обмолвился о ХП, так что можно и еще десяток раз повторить)
  • Виталий Панасенко(дом) (08.05.08 22:54) [6]

    > Сергей М,   (08.05.08 19:57) [5]

    Я в книгах вообще так и читал "столбцы"... хотя при создании таблицы(исторический факт, DBD, называется FIELD).. самого в оману вводило
  • PEAKTOP © (09.05.08 05:33) [7]
    > Сергей М,   (08.05.08 19:57) [5]
    >
    > Приведи, пож., ссылку на первоисточник ..


    InterBase6.0 / langref.pdf / CREATE DOMAIN (искать на ibase.ru)

    Неофициальный (пока не будет выполнен до конца) перевод:
    http://firebird.name/doku.php?id=create_domain
  • Сергей М, (09.05.08 18:14) [8]

    > PEAKTOP ©   (09.05.08 05:33) [7]


    Домен и столбец - две разные разницы
  • DelphiN! (12.05.08 08:11) [9]

    > 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+ и какие действия для этого необходимо выполнить. Естественно, в БД есть важные данные, и необходимо не допустить их потери
  • Виталий Панасенко © (12.05.08 11:12) [10]
    Backup под 1,5 - RESTORE под 2,х...если все нормально спроектировано, то последствий никаких
  • DelphiN! © (12.05.08 12:23) [11]
    Спасибо всем за помощь!
 
Конференция "Базы" » Динамическое создание столбцов процедурой на FireBird [Firebird 1.5]
Есть новые Нет новых   [134433   +22][b:0][p:0.001]