Oracleのテーブルから列名を取得するにはどうすればよいですか?


184

テーブルのデータと混同しないように、データベースをクエリして列名を取得する必要があります。私は名前のテーブルがある場合たとえば、EVENT_LOG含まれているeventIDeventTypeeventDesc、と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に固有のものであることに注意してください。
ConcernedOfTunbridgeWells 2014年

8
これが「行が選択されていません」を返す可能性がある理由はありますか?(Oracle内)
Ian R. O'Brien

9
「行が選択されていない」場合は、に変更USER_TAB_COLUMNSしてみてくださいall_tab_columns。結果について100%確信するために、あなたはスペシフィなオーナーである可能性があります。
Dracontis、2015

2
テーブルで作成されたのと同じ順序でそれらを取得する場合は、 "order by column_id"を追加できます。ここではいくつかの他の関連する列のデータは、テーブルからのものdocs.oracle.com/cd/B19306_01/server.102/b14237/...
Bernauer

2
テーブル名が大文字であることを確認してください。
Hugh Seagraves 2018年

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.columnsを使用できます

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からの説明:

このプラグマは、名前付きテーブルの列ごとに1行を返します。結果セットの列には、列名、データ型、列をNULLにできるかどうか、および列のデフォルト値が含まれます。結果セットの「pk」列は、主キーの一部ではない列の場合はゼロであり、主キーの一部である列の主キーの列のインデックスです。

参照:Sqlite.orgプラグマテーブル情報


1
なぜ私が反対票を投じられたのかは分かりませんが、それがあなたを助けてくれてうれしいです。
Shieldstroy 2013

2
質問のタグがOracleであるため、反対票が投じられた可能性があります。
Burhan Ali

2
私はOracleタグを削除してこれに賛成しました-非常に多くの回答があるので、この質問は一般的な質問としてうまく機能していると考えました。(mySQLを探してここに来ました。)
icedwater

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_COLUMNSOracle データベースリファレンスを介した公式ドキュメント。このビューは、現在のユーザーがアクセスできるテーブル、ビュー、およびクラスターの列について説明します。
Polywhirl氏、2015

しかし、テーブルの前にスキーマ名を付けることはできませんよね?たとえば、このようにしたい場合 select column_name from all_tab_columns where table_name = 'dbo.usertbl';
AhammadaliPK

9

他の答えは質問に十分に答えますが、私はいくつかの追加情報を共有すると思いました。その他は、テーブル情報を取得するために「DESCRIBEテーブル」構文を記述します。同じ形式で情報を取得したいが、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 '|'エラーが発生します
Al Lelopath '21

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

このクエリは、col名とstar- "select column_name、*" ..を指定して機能します。Oracleでは機能しません。
Teja


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

SQL Serverの場合:

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へようこそ。答えが正しいと思われる場合でも、「コード」だけではなく、詳細と説明を追加してください。それは誰にとってもより明確になります。
ジャン・レミーレヴィ

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には、列を説明する2つのビューがあります。

  • DBA_TAB_COLUMNSは、データベース内のすべてのテーブル、ビュー、およびクラスタの列を示します。

  • USER_TAB_COLUMNSは、
    現在のユーザーが所有するテーブル、ビュー、およびクラスターの列を示します。このビューには、
    OWNER列は表示されません。


0

答えはここにあります:http : //php.net/manual/en/function.mysql-list-fields.php 私はあなたのケースで次のコードを使用します:

$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

このクエリを実行できます

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は何の略ですか?rownumという名前の列を使用する必要がありますか?
mervebıçakçı2015


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


-3
SELECT COLUMN_NAME 
FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.