Как упорядочить имена полей по их «естественному» порядку? - PullRequest
0 голосов
/ 21 января 2020

Для небольшой утилиты, которую я пишу, я перечисляю все имена полей таблицы, используя:

select cols.column_name
from user_tab_columns cols
where cols.table_name = 'table_name_here';

Хотя это работает нормально, в нем перечислены имена в нечетном порядке (почти случайно, это не так алфавитный или обратный алфавитный или тому подобное, но по крайней мере это всегда то же самое).

Как мне применить «естественный» порядок, т. Е. Порядок, в котором поля были определены и перечислены, например, в SQLDeveloper?

, т.е.:

. .. заказ по ???

Ответы [ 3 ]

4 голосов
/ 21 января 2020

В столбце column_id указан порядок столбцов:

select column_name, column_id
from   user_tab_columns
where  cols.table_name = 'TABLE_NAME_HERE'
order by column_id

Так что если у вас есть таблица:

CREATE TABLE table_name_here( a int, c int, d int, b int );

, тогда верхний запрос выведет:

COLUMN_NAME | COLUMN_ID
:---------- | --------:
A           |         1
C           |         2
D           |         3
B           |         4

дБ <> скрипка здесь

1 голос
/ 21 января 2020

Приглядываясь ближе, я заметил, что есть столбец с именем column_id, который содержит этот порядок. Бьет меня, почему я сначала упустил это из виду.
Таким образом:

select * 
from user_tab_columns cols
where cols.table_name = 'table_name_here'
order by cols.column_id;

добился цели!

Извините за использованную полосу пропускания!

0 голосов
/ 21 января 2020

Используйте этот запрос:

select c.owner, c.table_name, c.column_name, c.column_id
  from all_tab_cols c
 where owner = 'your_owner'  
   and table_name = 'your_table'
 order by column_id ; -- <==this is the id of column in the order it was created

С наилучшими пожеланиями:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...