Oracle의 테이블에서 열 이름을 얻는 방법은 무엇입니까?


184

열 이름 을 얻으려면 데이터베이스를 쿼리해야 하며 테이블의 데이터와 혼동하지 마십시오. 예를 들어, 내가라는 테이블이있는 경우 EVENT_LOG포함 된 eventID, eventType, eventDesc, 및eventTime , 나는 쿼리 및 아무것도에서 해당 필드 이름을 검색 할 것입니다.

나는 이것을하는 방법을 발견했다 :

그러나 나는 알아야합니다 : 오라클 에서 어떻게 이것을 할 수 있습니까?

답변:


191

테이블 열 메타 데이터에 대해 USER_TAB_COLUMNS 테이블을 쿼리 할 수 ​​있습니다.

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

21
이것은 Oracle에만 해당됩니다.
ConcernedOfTunbridgeWells

8
이것이 "선택된 행 없음"을 리턴 할 수있는 이유가 있습니까? (Oracle에서)
Ian R. O'Brien

9
'행을 선택하지 않았습니다'가 있으면로 변경 USER_TAB_COLUMNS을 시도 할 수 있습니다 all_tab_columns. 결과에 대해 100 % 확신하려면 매운 소유자가 될 수 있습니다.
Dracontis

2
테이블에서 작성된 순서와 동일한 순서로 검색하려는 경우 "ORDER by column_id"를 추가 할 수 있습니다. 다음은 docs.oracle.com/cd/B19306_01/server.102/b14237/…
Bernauer

2
테이블 이름이 대문자인지 확인하십시오.
Hugh Seagraves

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의 설명 :

이 pragma는 명명 된 테이블의 각 열에 대해 하나의 행을 반환합니다. 결과 집합의 열에는 열 이름, 데이터 형식, 열이 NULL 일 수 있는지 여부 및 열의 기본값이 포함됩니다. 기본 키의 일부가 아닌 열의 경우 결과 집합의 "pk"열이 0이고 기본 키의 일부인 열의 기본 키 열의 인덱스입니다.

참조 : Sqlite.org Pragma 테이블 정보


1
왜 내가 다운 투표를했는지 확실하지 않지만 도움이 되었기 때문에 기쁩니다.
shieldstroy

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

또는 DESCRIBESQL * PLUS를 사용하는 경우 테이블을 사용할 수 있습니다.

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

공식 ALL_TAB_COLUMNSOracle Database Reference 를 통한 공식 문서 . 이보기는 현재 사용자가 액세스 할 수있는 테이블,보기 및 클러스터의 열을 설명합니다.
Mr. Polywhirl

그러나 우리는 테이블 앞에 스키마 이름을 줄 수 없습니다. 예를 들어 내가 이걸 원한다면 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

4

오라클

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 이름과 별표 "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';

스택 오버플로 @ 전문가 1에 오신 것을 환영합니다. 답이 정확 해 보이는 경우에도 '코드'보다 자세한 내용과 설명을 추가하십시오. 모두에게 더 명확 할 것입니다.
Jean-Rémy Revy

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
    는 현재 사용자가 소유 한 테이블, 뷰 및 클러스터 의 열을 설명합니다 . 이보기에는
    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이라는 열을 사용해야합니까?
merve bıçakçı


-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.