Bagaimana saya bisa mendapatkan nama kolom dari tabel di Oracle?

184

Saya perlu query database untuk mendapatkan nama kolom , jangan bingung dengan data dalam tabel. Sebagai contoh, jika saya memiliki tabel bernama EVENT_LOGyang berisi eventID, eventType, eventDesc, dan eventTime, maka saya akan ingin mengambil nama-nama field dari query dan tidak ada yang lain.

Saya menemukan cara melakukan ini di:

Tapi saya perlu tahu: bagaimana ini bisa dilakukan di Oracle ?

Paxenos
sumber

Jawaban:

191

Anda dapat meminta tabel USER_TAB_COLUMNS untuk metadata kolom tabel.

SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'MYTABLE'
baretta
sumber
21
Perhatikan bahwa ini khusus untuk Oracle.
ConcernedOfTunbridgeWells
8
Apakah ada alasan mengapa ini bisa mengembalikan "tidak ada baris yang dipilih"? (Dalam Oracle.)
Ian R. O'Brien
9
Jika Anda memiliki 'ada baris yang dipilih' maka Anda bisa mencoba untuk perubahan USER_TAB_COLUMNSke all_tab_columns. Untuk menjadi 100% yakin tentang hasil, Anda bisa pemilik speficy.
Dracontis
2
Anda bisa menambahkan "ORDER by column_id" jika Anda ingin mengambilnya dalam urutan yang sama seperti yang dibuat dalam tabel. Berikut adalah beberapa data kolom lain yang relevan dari tabel docs.oracle.com/cd/B19306_01/server.102/b14237/…
Bernauer
2
Pastikan nama tabel huruf besar.
Hugh Seagraves
67

Di SQL Server ...

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

Ketik = 'V' untuk tampilan Ketik = 'U' untuk tabel

Eppz
sumber
39

Kamu bisa melakukan ini:

describe EVENT_LOG

atau

desc EVENT_LOG

Catatan: hanya berlaku jika Anda tahu nama tabel dan khusus untuk Oracle.

Sergey Golovchenko
sumber
26

Untuk SQL Server 2008, kita dapat menggunakan information_schema.columns untuk mendapatkan informasi kolom

SELECT *
FROM   information_schema.columns
WHERE  table_name = 'Table_Name'
ORDER  BY ordinal_position  
Jom
sumber
1
Perhatikan bahwa INFORMATION_SCHEMAtabel adalah tabel metadata standar ANSI. RDBMS modern yang bagus dan bagus akan memilikinya.
Bacon Bits
18

Untuk SQLite, saya yakin Anda bisa menggunakan sesuatu seperti berikut:

PRAGMA table_info(table-name);

Penjelasan dari sqlite.org:

Pragma ini mengembalikan satu baris untuk setiap kolom dalam tabel bernama. Kolom dalam kumpulan hasil mencakup nama kolom, tipe data, apakah kolom tersebut NULL atau tidak, dan nilai default untuk kolom tersebut. Kolom "pk" di set hasil adalah nol untuk kolom yang bukan bagian dari kunci utama, dan merupakan indeks dari kolom di kunci utama untuk kolom yang merupakan bagian dari kunci utama.

Lihat juga: Sqlite.org Info Meja Pragma

Shieldstroy
sumber
1
Saya juga tidak yakin mengapa saya dipilih, tetapi saya senang itu membantu Anda.
shieldstroy
2
Mungkin telah dibatalkan karena pertanyaannya ditandai Oracle.
Burhan Ali
2
Saya telah menghapus tag Oracle dan meningkatkan ini - saya pikir karena ada begitu banyak jawaban pertanyaan ini berfungsi lebih baik sebagai yang umum. (Saya datang ke sini untuk mencari mySQL.)
icedwater
16

Informasi itu disimpan dalam ALL_TAB_COLUMNStabel sistem:

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

DUMMY

Atau Anda bisa DESCRIBEmenggunakan tabel jika Anda menggunakan SQL * PLUS:

SQL> desc dual
Name                               Null?    Type
----------------------------------------------------- -------- ---------------------- -------------
DUMMY                               VARCHAR2(1)
Jon Ericson
sumber
Dokumentasi resmi tentang ALL_TAB_COLUMNSmelalui Referensi Database Oracle resmi . Tampilan ini menjelaskan kolom dari tabel, tampilan, dan cluster yang dapat diakses oleh pengguna saat ini.
Tn. Polywhirl
Tapi kita tidak bisa memberi nama skema di depan meja, kan? misalnya jika saya mau seperti ini select column_name from all_tab_columns where table_name = 'dbo.usertbl';
AhammadaliPK
9

Jawaban lainnya cukup menjawab pertanyaan, tetapi saya pikir saya akan membagikan beberapa informasi tambahan. Lainnya menggambarkan sintaks "DESCRIBE table" untuk mendapatkan informasi tabel. Jika Anda ingin mendapatkan informasi dalam format yang sama, tetapi tanpa menggunakan DESCRIBE, Anda dapat melakukannya:

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';

Mungkin tidak terlalu penting, tetapi saya menulisnya lebih awal dan sepertinya cocok.

Sasha
sumber
Mencoba ini sekarang (bertahun-tahun kemudian) di SQL Server 2008, saya mendapatkan Incorrect Syntax near '|'kesalahan
Al Lelopath
4

Untuk Oracle

SELECT column_name FROM user_tab_cols WHERE table_name=UPPER('tableName');
jampez77
sumber
3
select column_name,* from information_schema.columns
 where table_name = 'YourTableName'
order by ordinal_position

sumber
apakah query ini berfungsi, dengan menentukan nama col dan bintang- "select column_name, *" .. Tidak berfungsi di Oracle.
Teja
3
describe YOUR_TABLE;

Dalam kasus Anda:

describe EVENT_LOG;
Rohit
sumber
3

Untuk MySQL, gunakan

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

Bahkan ini juga salah satu cara kita dapat menggunakannya

select * from product where 1 != 1
Terima kasih
sumber
2

Untuk SQL Server:

SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = object_id('TABLE_NAME')
bstricks
sumber
2
SELECT COLUMN_NAME 'all_columns' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='user';
satu ahli
sumber
Selamat datang di Stack Overflow @expert one. Bahkan jika jawaban Anda tampaknya akurat, harap tambahkan lebih banyak detail dan penjelasan daripada 'kode' saja. Akan lebih jelas untuk semua orang.
Jean-Rémy Revy
1

Anda juga dapat mencoba ini, tetapi mungkin lebih banyak informasi daripada yang Anda butuhkan:

sp_columns TABLE_NAME
WEFX
sumber
1

Mysql

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

Ini akan mengembalikan hasil seperti ini:

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

Kemudian untuk mencabut nilai-nilai yang Anda bisa cukup

fetch row[0]

Ini juga bagus untuk melewatkan input secara dinamis karena REGEXP membutuhkan '|' untuk banyak input, tetapi juga merupakan cara untuk memisahkan data dan mudah untuk menyimpan / meneruskan ke kelas / fungsi.

Coba lemparkan data dummy juga untuk keamanan saat mengirimnya dan bandingkan apa yang dikembalikan ketika menerima kesalahan.

Dbo
sumber
1

Di Oracle, ada dua tampilan yang menggambarkan kolom:

  • DBA_TAB_COLUMNS menjelaskan kolom semua tabel, tampilan, dan cluster dalam database.

  • USER_TAB_COLUMNS menjelaskan kolom dari tabel, tampilan, dan
    cluster yang dimiliki oleh pengguna saat ini. Tampilan ini tidak menampilkan
    kolom PEMILIK.

Renaud Kern
sumber
0

Jawabannya ada di sini: http://php.net/manual/en/function.mysql-list-fields.php Saya akan menggunakan kode berikut dalam kasus Anda:

$result = mysql_query("SHOW COLUMNS FROM sometable");
if (!$result) {
    echo 'Could not run query: ' . mysql_error();
    exit;
}
$fields = array();
if (mysql_num_rows($result) > 0) {
    while ($row = mysql_fetch_assoc($result)) {
        $fields[] = $row['Field'];
    }
}
pengguna2558588
sumber
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'
Henry
sumber
0

Anda dapat menjalankan kueri ini

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;
Etibar Hasanov
sumber
-1

Cukup pilih baris pertama dari tabel, untuk oracle: select * from <table name> where rownum = 1;

langit biru
sumber
Apa yang dimaksud dengan rownum? Apakah saya perlu menggunakan kolom bernama rownum?
merve bıçakçı
-1

Datang ke pertanyaan ini mencari akses ke nama kolom di Teradata, jadi saya akan menambahkan jawaban untuk 'rasa' mereka dari SQL:

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

Info tersebut disimpan dalam dbase DBC.

Mendapatkan tipe data sedikit lebih terlibat: Dapatkan tipe kolom menggunakan tabel sistem teradata

carnust
sumber
-1

Coba ini

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%'
sahabat17
sumber
-3
SELECT COLUMN_NAME 
FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName'
pengguna3655399
sumber