Як я можу отримати назви стовпців із таблиці в Oracle?


184

Мені потрібно запитувати базу даних, щоб отримати назви стовпців , не плутати їх з даними таблиці. Наприклад, якщо у мене є таблиця з ім'ям , EVENT_LOGякий містить eventID, eventType, eventDesc, і eventTime, то я хотів би отримати ці імена полів із запиту і нічого іншого.

Я дізнався, як це зробити в:

Але мені потрібно знати: як це можна зробити в Oracle ?

Відповіді:


191

Ви можете запитувати таблицю USER_TAB_COLUMNS щодо метаданих стовпців таблиці.

SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'MYTABLE'

21
Зауважте, що це стосується Oracle.
ЗанепокоєнийOfTunbridgeWells

8
Чи є якась причина, чому це може повернути "немає вибраних рядків"? (В Oracle.)
Ian R. O'Brien

9
Якщо у вас немає «ні однієї рядки , обраної» , то ви могли б спробувати змінити USER_TAB_COLUMNSдо all_tab_columns. Щоб бути на 100% впевнений у результаті, ви могли б мати власний власник.
Драконтіс

2
Ви можете додати "ЗАМОВИТИ по столбцу", якщо ви хочете отримати їх у тому ж порядку, як вони були створені в таблиці. Ось інші релевантні дані стовпців із таблиці docs.oracle.com/cd/B19306_01/server.102/b14237/…
Бернауер

2
Переконайтеся, що назва таблиці є великим літером.
Х'ю Сігрейз

67

У SQL Server ...

SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = (SELECT id FROM sysobjects WHERE type = 'V' AND [Name] = 'Your table name')

Тип = 'V' для представлень Тип = 'U' для таблиць


39

Ви можете зробити це:

describe EVENT_LOG

або

desc EVENT_LOG

Примітка: застосовується лише в тому випадку, якщо ви знаєте ім'я таблиці та спеціально для Oracle.


26

Для SQL Server 2008 ми можемо використати стовпці information_schema.collum для отримання інформації про стовпці

SELECT *
FROM   information_schema.columns
WHERE  table_name = 'Table_Name'
ORDER  BY ordinal_position  

1
Зауважте, що INFORMATION_SCHEMAтаблиці - це стандартні таблиці метаданих ANSI. Будь-які добрі, сучасні RDBMS матимуть їх.
шматочки бекону

18

Для SQLite я вважаю, що ви можете використовувати щось на зразок наступного:

PRAGMA table_info(table-name);

Пояснення з sqlite.org:

Ця прагма повертає один рядок для кожного стовпця в іменованій таблиці. Стовпці в наборі результатів містять назву стовпця, тип даних, може бути стовпець NULL, а також значення за замовчуванням для стовпця. Стовпець "pk" у наборі результатів дорівнює нулю для стовпців, які не є частиною первинного ключа, і є індексом стовпця в первинному ключі для стовпців, що входять до складу первинного ключа.

Дивіться також: Інформація про таблицю прагми Sqlite.org


1
Я не впевнений, чому я також проголосував, але радий, що вам це допомогло.
щитстрой

2
Можливо, це було знято з огляду на те, що питання позначено Oracle.
Бурхан Алі

2
Я видалив тег Oracle і підтримав це - я подумав, оскільки існує так багато відповідей, це питання працює краще, ніж загальний. (Я прийшов сюди шукати mySQL.)
крижана вода

16

Ця інформація зберігається в ALL_TAB_COLUMNSсистемній таблиці:

SQL> select column_name from all_tab_columns where table_name = 'DUAL';

DUMMY

Або ви можете DESCRIBEтаблицю, якщо ви використовуєте SQL * PLUS:

SQL> desc dual
Name                               Null?    Type
----------------------------------------------------- -------- ---------------------- -------------
DUMMY                               VARCHAR2(1)

Офіційна документація на ALL_TAB_COLUMNSофіційному довіднику Oracle Database . Це представлення описує стовпці таблиць, представлень та кластерів, доступних для поточного користувача.
Містер Polywhirl

Але ми не можемо дати назву схеми перед столом, правда? наприклад, якщо я хочу так select column_name from all_tab_columns where table_name = 'dbo.usertbl';
AhammadaliPK

9

Інші відповіді достатньо відповідають на запитання, але я думав, що поділюсь додатковою інформацією. Інші описують синтаксис "DESCRIBE table" для отримання інформації про таблицю. Якщо ви хочете отримати інформацію в тому самому форматі, але не використовуючи DESCRIBE, ви можете зробити:

SELECT column_name as COLUMN_NAME, nullable || '       ' as BE_NULL,
  SUBSTR(data_type || '(' || data_length || ')', 0, 10) as TYPE
 FROM all_tab_columns WHERE table_name = 'TABLENAME';

Напевно, це не має великого значення, але я написав це раніше і, здається, підходить.


Спробувавши це зараз (років по тому) у SQL Server 2008, я отримую Incorrect Syntax near '|'помилку
Аль Лелопат

4

Для Oracle

SELECT column_name FROM user_tab_cols WHERE table_name=UPPER('tableName');

3
select column_name,* from information_schema.columns
 where table_name = 'YourTableName'
order by ordinal_position

чи працює цей запит із зазначенням імені колу та зірочки- "виберіть ім'я стовпця, *" .. Це не працює в Oracle.
Тея


3

Для MySQL використовуйте

SELECT column_name 
FROM information_schema.columns 
WHERE 
table_schema = 'Schema' AND table_name = 'Table_Name'

3

Навіть це теж один із способів, яким ми можемо користуватися

select * from product where 1 != 1


2
SELECT COLUMN_NAME 'all_columns' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='user';

Ласкаво просимо на стек Overflow @expert one. Навіть якщо ваша відповідь здається точною, додайте більше деталей та пояснень, ніж "код". Для всіх було б зрозуміліше.
Жан-Ремі Реві

1

Ви також можете спробувати це, але це може бути більше інформації, ніж вам потрібно:

sp_columns TABLE_NAME

1

Mysql

SHOW COLUMNS FROM a_table_named_users WHERE Field REGEXP 'user_id|user_name|user_pass'

Це поверне результат приблизно таким:

Field     |  Type        |   Null   |   Key   |   Default   |   Extra  
user_id      int(8)          NO         PRI       NULL          auto_increment
user_name    varchar(64)     NO         MUL       NULL
user_pass    varchar(64)     NO                   NULL

Потім витягнути значення ви можете просто

fetch row[0]

Це також чудово підходить для динамічного передачі вводу, оскільки REGEXP потребує "|" для декількох входів, але це також спосіб зберігати дані відокремленими та зручними для зберігання / переходу до класів / функцій.

Спробуйте ввести дані манекена, а також для безпеки при надсиланні їх і порівняйте те, що було повернуто при отриманні помилок.


1

В Oracle є два погляди, що описують стовпці:

  • DBA_TAB_COLUMNS описує стовпці всіх таблиць, представлень та кластерів у базі даних.

  • USER_TAB_COLUMNS описує стовпці таблиць, представлень та
    кластерів, що належать поточному користувачеві. Цей вигляд не відображає
    стовпця ВЛАСНИКА.



0
SELECT A.COLUMN_NAME, A.* FROM all_tab_columns a 
WHERE table_name = 'Your Table Name'
AND A.COLUMN_NAME = 'COLUMN NAME' AND a.owner = 'Schema'

0

Ви можете запустити цей запит

SELECT t.name AS table_name,
SCHEMA_NAME(schema_id) AS schema_name,
c.name AS column_name
FROM sys.tables AS t
INNER JOIN sys.columns c ON t.OBJECT_ID = c.OBJECT_ID
WHERE c.name LIKE '%%' --if you want to find specific column write here 
ORDER BY schema_name, table_name;

-1

Просто виберіть перший ряд із таблиці для oracle: select * from <table name> where rownum = 1;


Що означає роунум? Чи потрібно використовувати стовпчик з іменем rownum?
merve bıçakçı

-1

Наткнувся на це питання, шукаючи доступ до назв стовпців на Терадаті, тож я додам відповідь за їх "аромат" SQL:

SELECT ColumnName
FROM DBC.Columns
WHERE DatabaseName='DBASE_NAME'
AND TableName='TABLE_NAME';

Інформація зберігається в базі даних DBC.

Отримання типів даних дещо більше: залучення типу стовпців за допомогою системних таблиць тераданих даних


-1

Спробуйте це

select * from sys.all_columns c join sys.objects o on c.object_id=o.object_id where o.name = 'TABLENAME' and c.name like '%COLUMN NAME%'


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.