Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получение полей таблицы для построения запроса / 6 сообщений из 6, страница 1 из 1
19.11.2014, 01:38
    #38810233
Aina2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение полей таблицы для построения запроса
Добрый вечер товарищи.

Нужно сделать следующее.

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

Код: plsql
1.
select RDB$FIELD_NAME from RDB$RELATION_FIELDS  where RDB$RELATION_NAME = <какая-та таблица>



причем мне нужно получить поля в том порядке как они создавались, а не в отсортированном по возрастанию.

затем мне нужно после получения сформировать запрос insert

никак не получается, не могли бы подсказать или как говорится наставить на путь истинный
...
Рейтинг: 0 / 0
19.11.2014, 02:24
    #38810243
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение полей таблицы для построения запроса
Aina2008,

1)

Код: plsql
1.
2.
select RDB$FIELD_NAME from RDB$RELATION_FIELDS  where RDB$RELATION_NAME = <какая-та таблица>
ORDER BY RDB$FIELD_POSITION



Хотя в контексте вопроса порядок следования полей абсолютно пофиг.

2) Собери в строку в EXECUTE BLOCK к примеру:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
execute block (tablename varchar(32)=?tablename)
returns (sql varchar(5000))
as
declare variable fname varchar(32);
declare variable pars varchar(5000);
begin
  sql='INSERT INTO '||tablename||'(';
  pars=' VALUES (';
  for select trim(RDB$FIELD_NAME) from RDB$RELATION_FIELDS  where RDB$RELATION_NAME = upper(:tablename)
       ORDER BY RDB$FIELD_POSITION
      into :fname
  do begin
         sql=sql||fname||',';
         pars=pars||':'||fname||',';
      end
  sql=trim(',' from sql);
  pars=trim(',' from pars);
  sql=sql||')'||pars||')';
  suspend;
end
...
Рейтинг: 0 / 0
19.11.2014, 02:33
    #38810245
Aina2008
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение полей таблицы для построения запроса
спасибо за ответ
...
Рейтинг: 0 / 0
19.11.2014, 10:20
    #38810388
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение полей таблицы для построения запроса
RDB$FIELD_POSITION это не "порядок в котором они создавались". RDB$FIELD_ID - вот оно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
19.11.2014, 10:34
    #38810418
DarkMaster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение полей таблицы для построения запроса
Dimitry Sibiryakov,

Смотрю в LANGREF:

RDB$FIELD_POSITION SMALLINT The position of the column in relation to other columns:
• isql obtains the ordinal position for displaying column values when
printing rows from this column
• gpre uses the column order for SELECT and INSERT statements
If two or more columns in the same table have the same value for this
column, those columns appear in random order

RDB$FIELD_ID SMALLINT Identifier for use in BLR (Binary Language Representation) to name the
column
• Because this identifier changes during backup and restoration of the
database, try to use it in transient requests only
• Do not modify this column


Как бы RDB$FIELD_POSITION лучше подходит.
...
Рейтинг: 0 / 0
19.11.2014, 12:04
    #38810564
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение полей таблицы для построения запроса
DarkMasterКак бы RDB$FIELD_POSITION лучше подходит.
Лучше подходит к чему? Позиция может быть изменена с помощью alter table и уже не будет
соответствовать порядку создания полей.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Получение полей таблицы для построения запроса / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]