Oracle'daki bir tablodan sütun adlarını nasıl alabilirim?


184

Tablodaki verilerle karıştırılmaması gereken sütun adlarını almak için veritabanını sorgulamak gerekiyor . Örneğin, ben adında bir tablo varsa EVENT_LOGiçerdiğini eventID, eventType, eventDescveeventTime , o zaman sorgu ve başka bir şey gelenler alan adlarını almak istemez.

Bunu nasıl yapacağımı buldum:

Ancak şunu bilmeliyim: Bu Oracle'da nasıl yapılabilir ?

Yanıtlar:


191

USER_TAB_COLUMNS tablosunu tablo sütunu meta verileri için sorgulayabilirsiniz.

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

21
Bunun Oracle'a özgü olduğunu unutmayın.
ConcernedOfTunbridgeWells

8
Bunun "satır seçilmedi" ifadesinin geri dönmesinin bir nedeni var mı? (Oracle'da.)
Ian R. O'Brien

9
Eğer 'seçilmiş hiçbir satır' varsa o zaman değişime deneyebilirsiniz USER_TAB_COLUMNSiçin all_tab_columns. Sonuç hakkında% 100 emin olmak için speficy sahibi olabilir.
Dracontis

2
Tabloda oluşturuldukları sırayla almak istiyorsanız, "ORDER by column_id" ekleyebilirsiniz. Tablodaki ilgili diğer sütun verileri docs.oracle.com/cd/B19306_01/server.102/b14237/…
Bernauer

2
Tablo adının büyük harf olduğundan emin olun.
Hugh Seagraves

67

SQL Server'da ...

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

Görünümler için Type = 'V' Tablolar için Type = 'U'


39

Bunu yapabilirsiniz:

describe EVENT_LOG

veya

desc EVENT_LOG

Not: yalnızca tablo adını biliyorsanız ve özellikle Oracle için geçerlidir.


26

SQL Server 2008 için, sütun bilgilerini almak için information_schema.columns öğesini kullanabiliriz

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

1
Not olduğu INFORMATION_SCHEMAtablolar ANSI standart meta tablolardır. Herhangi bir iyi, modern RDBMS onlara sahip olacaktır.
Bacon Bits

18

SQLite için aşağıdaki gibi bir şey kullanabileceğinizi düşünüyorum:

PRAGMA table_info(table-name);

Sqlite.org sitesinden açıklama:

Bu pragma, adlandırılmış tablodaki her sütun için bir satır döndürür. Sonuç kümesindeki sütunlar, sütun adını, veri türünü, sütunun NULL olup olmadığını ve sütunun varsayılan değerini içerir. Sonuç kümesindeki "pk" sütunu, birincil anahtarın parçası olmayan sütunlar için sıfırdır ve birincil anahtarın bir parçası olan sütunlar için birincil anahtardaki sütunun dizinidir.

Ayrıca bakınız: Sqlite.org Pragma Tablo Bilgisi


1
Ben de neden oy kullanmadığımdan emin değilim, ama size yardımcı olduğuna sevindim.
shieldstroy

2
Soru Oracle olarak etiketlendiğinden indirgenmiş olabilir.
Burhan Ali

2
Oracle etiketini kaldırdım ve bunu iptal ettim - bu sorunun genel olarak daha iyi çalıştığı için çok fazla cevap olduğundan anladım. (Buraya
mySQL'i

16

Bu bilgiler ALL_TAB_COLUMNSsistem tablosunda saklanır :

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

DUMMY

Veya DESCRIBESQL * PLUS kullanıyorsanız tabloyu yapabilirsiniz:

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

Resmi ALL_TAB_COLUMNSOracle Database Reference aracılığıyla resmi belgeler . Bu görünüm, geçerli kullanıcının erişebileceği tabloların, görünümlerin ve kümelerin sütunlarını açıklar.
Bay Polywhirl

Ama şema adını masanın önüne veremeyiz, değil mi? örneğin ben böyle isterseniz select column_name from all_tab_columns where table_name = 'dbo.usertbl';
AhammadaliPK

9

Diğer cevaplar soruyu yeterince cevaplıyor, ancak bazı ek bilgileri paylaşacağımı düşündüm. Diğerleri ise tablo bilgilerini almak için "DESCRIBE table" sözdizimini tanımlar. Bilgileri aynı biçimde, ancak DESCRIBE kullanmadan almak istiyorsanız, şunları yapabilirsiniz:

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

Muhtemelen çok önemli değil, ama daha önce yazdım ve uygun görünüyor.


SQL Server 2008'de şimdi (yıllar sonra) deniyorum, bir Incorrect Syntax near '|'hata alıyorum
Al Lelopath

4

Oracle için

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

Bu sorgu, bir col adı ve star- "select column_name, *" belirterek çalışır. Oracle'da çalışmıyor.
Teja

3
describe YOUR_TABLE;

Senin durumunda :

describe EVENT_LOG;

3

MySQL için şunu kullanın:

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

3

Bu bile onu kullanma şeklimizden biri

select * from product where 1 != 1

2

SQL Server için:

SELECT [name] AS [Column Name]
FROM syscolumns
WHERE id = object_id('TABLE_NAME')

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

Stack Overflow @expert one'a hoş geldiniz. Cevabınız doğru görünse bile, lütfen juste 'code'dan daha fazla ayrıntı ve açıklama ekleyin. Herkes için daha açık olurdu.
Jean-Rémy Revy

1

Bunu da deneyebilirsiniz, ancak ihtiyacınız olandan daha fazla bilgi olabilir:

sp_columns TABLE_NAME

1

mySQL

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

Bu, aşağıdaki gibi bir sonuç döndürür:

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

Daha sonra değerleri çıkarmak için

fetch row[0]

REGEXP '|' aynı zamanda verileri ayrı tutmanın ve sınıfları / işlevleri saklamayı / aktarmayı kolaylaştıran bir yöntemdir.

Gönderirken güvenlik için kukla veriler de atmayı deneyin ve herhangi bir hata alırken döndürülenleri karşılaştırın.


1

Oracle'da sütunları açıklayan iki görünüm vardır:

  • DBA_TAB_COLUMNS, veritabanındaki tüm tabloların, görünümlerin ve kümelerin sütunlarını açıklar.

  • USER_TAB_COLUMNS
    , geçerli kullanıcının sahip olduğu tabloların, görünümlerin ve kümelerin sütunlarını açıklar . Bu görünüm
    SAHİBİ sütununu görüntülemez.


0

Cevap burada: http://php.net/manual/en/function.mysql-list-fields.php Senin durumunda aşağıdaki kodu kullanırdım:

$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'];
    }
}

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

bu sorguyu çalıştırabilirsin

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 için tablodan ilk satırı seçmeniz yeterlidir: select * from <table name> where rownum = 1;


Rownum ne anlama geliyor? Rownum adlı bir sütun kullanmam gerekir mi?
merve bıçakçı


-1

Bunu dene

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


-3
SELECT COLUMN_NAME 
FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.