如何从Oracle中的表中获取列名?

Pax*_*nos 174 sql database oracle

我需要查询数据库以获取列名,而不是与表中的数据混淆.举例来说,如果我有一个名为表中EVENT_LOG包含eventID,eventType,eventDesc,和eventTime,然后我会想检索查询,并没有其他的字段名.

我找到了如何做到这一点:

但我需要知道:如何在Oracle中完成这项工作?

bar*_*tta 178

您可以在USER_TAB_COLUMNS表中查询表列元数据.

SELECT table_name, column_name, data_type, data_length
FROM USER_TAB_COLUMNS
WHERE table_name = 'MYTABLE'
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这是Oracle特有的. (21认同)
  • 如果您没有"选择任何行",那么您可以尝试将"USER_TAB_COLUMNS"更改为"all_tab_columns".为了100%肯定结果,你可以speficy所有者. (7认同)
  • 是否有任何理由可以返回"没有选择行"?(在Oracle中.) (5认同)
  • 确保表名是大写的。 (3认同)
  • 如果要按照在表中创建的顺序检索它们,可以添加"按列列出ORDER".以下是表https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_2094.htm#I1020277中的其他相关列数据 (2认同)
  • Oracle 表 USER_TAB_COLUMNS 描述了当前用户拥有的列。要访问所有所有者的所有列,可以查询 DBA_TAB_COLUMNS。 (2认同)

Epp*_*ppz 67

在SQL Server中......

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

类型='V'表示视图Type ='U'表


Ser*_*nko 39

你可以这样做:

describe EVENT_LOG
Run Code Online (Sandbox Code Playgroud)

要么

desc EVENT_LOG
Run Code Online (Sandbox Code Playgroud)

注意:仅在您知道表名且特别是Oracle时才适用.


Jom*_*Jom 25

对于SQL Server 2008,我们可以使用information_schema.columns来获取列信息

SELECT *
FROM   information_schema.columns
WHERE  table_name = 'Table_Name'
ORDER  BY ordinal_position  
Run Code Online (Sandbox Code Playgroud)


shi*_*roy 18

对于SQLite,我相信你可以使用如下内容:

PRAGMA table_info(table-name);
Run Code Online (Sandbox Code Playgroud)

来自sqlite.org的解释:

该pragma为命名表中的每列返回一行.结果集中的列包括列名,数据类型,列是否可以为NULL以及列的默认值.对于不属于主键的列,结果集中的"pk"列为零,并且是主键中作为主键一部分的列的列的索引.

另请参见:Sqlite.org Pragma表信息

  • 它可能被低估了,因为问题标记为Oracle. (2认同)
  • 我已经删除了Oracle标签并对此进行了支持 - 我认为,由于答案太多,这个问题作为一般问题更有效.(我来这里寻找mySQL之一.) (2认同)

Jon*_*son 14

该信息存储在ALL_TAB_COLUMNS系统表中:

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

DUMMY
Run Code Online (Sandbox Code Playgroud)

或者DESCRIBE,如果您使用的是SQL*PLUS,那么您可以使用该表:

SQL> desc dual
Name                               Null?    Type
----------------------------------------------------- -------- ---------------------- -------------
DUMMY                               VARCHAR2(1)
Run Code Online (Sandbox Code Playgroud)


Sas*_*sha 8

其他答案足以回答这个问题,但我想我会分享一些额外的信息.其他人描述"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';
Run Code Online (Sandbox Code Playgroud)

可能并不重要,但我早些时候写了它似乎很合适.


jam*_*z77 8

对于甲骨文

SELECT column_name FROM user_tab_cols WHERE table_name=UPPER('tableName');
Run Code Online (Sandbox Code Playgroud)


小智 5

describe YOUR_TABLE;
Run Code Online (Sandbox Code Playgroud)

在你的情况下:

describe EVENT_LOG;
Run Code Online (Sandbox Code Playgroud)