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

我需要查询数据库来获取列名 ,而不是与表中的数据混淆。 例如,如果我有一个名为EVENT_LOG的表包含EVENT_LOGeventTypeeventDesceventTime ,那么我想要从查询中检索这些字段名称,而不是其他的。

我发现如何做到这一点:

  • Microsoft SQL Server
  • MySQL的
  • PostgreSQL的

但是我需要知道:这怎么能在Oracle中完成呢?

您可以查询USER_TAB_COLUMNS表以获取表列元数据。

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

在SQL Server中…

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

Type ='V'表示视图Type ='U'表格

你可以这样做:

 describe EVENT_LOG 

要么

 desc EVENT_LOG 

注意:只有当您知道表名并专门用于Oracle时才适用。

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

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

对于SQLite我相信你可以使用类似下面的东西:

 PRAGMA table_info(table-name); 

来自sqlite.org的解释:

该编译指示为指定表中的每个列返回一行。 结果集中的列包括列名称,数据types,列是否可以为NULL以及列的默认值。 结果集中的“pk”列对于不是主键一部分的列是零,并且是作为主键的一部分的列的主键列中的索引。

另请参阅: Sqlite.org Pragma Table Info

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

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

或者,如果您使用SQL * PLUS,则可以DESCRIBE该表:

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

其他答案充分回答了这个问题,但我想我会分享一些额外的信息。 其他人描述了“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'; 

可能没什么关系,但是我早点写了,似乎很合适。

 select column_name,* from information_schema.columns where table_name = 'YourTableName' order by ordinal_position 

对于MySQL,使用

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

对于SQL Server:

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

对于Oracle

 SELECT column_name FROM user_tab_cols WHERE table_name=UPPER('tableName'); 
 describe YOUR_TABLE; 

在你的情况下:

 describe EVENT_LOG; 

即使这也是我们可以使用它的方式之一

 select * from product where 1 != 1 
 SELECT COLUMN_NAME 'all_columns' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='user'; 

你也可以试试,但可能比你需要更多的信息:

 sp_columns TABLE_NAME 

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] 

这对于dynamic传递input也很好,因为REGEXP需要“|” 对于多个input,但也是一种保持数据分离和易于存储/传递到类/function的方法。

尝试抛出虚拟数据以确保安全性,并比较接收到错误时返回的内容。

答案在这里: 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']; } } 
 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' 

你可以运行这个查询

 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; 

在Oracle中,有两种描述列的视图:

  • DBA_TAB_COLUMNS描述数据库中所有表,视图和集群的列。

  • USER_TAB_COLUMNS描述表,视图和列的列
    当前用户拥有的群集。 这个视图不显示
    OWNER列。

只需从表中select第一行,对于oracle: select * from <table name> where rownum = 1;

遇到这个问题寻找访问Teradata上的列名,所以我会添加他们的“风味”SQL的答案:

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

信息存储在DBC数据库中。

获取数据types有一点涉及: 使用Teradata系统表获取列types

尝试这个

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

查询以selectSQL 2008中的列详细信息

 DECLARE @tableName varchar(20)='item' SELECT UPPER(COLUMN_NAME)columnname ,DATA_TYPE+(CASE DATA_TYPE WHEN 'numeric' THEN '('+CAST(NUMERIC_PRECISION AS varchar)+','+CAST(NUMERIC_PRECISION_RADIX AS varchar)+')' WHEN 'varchar' THEN '('+CAST(CHARACTER_MAXIMUM_LENGTH AS varchar)+')' ELSE '' END) ,'DECLARE @'+COLUMN_NAME+' '+DATA_TYPE+(CASE DATA_TYPE WHEN 'numeric' THEN '('+CAST(NUMERIC_PRECISION AS varchar)+','+CAST(NUMERIC_PRECISION_RADIX AS varchar)+')' WHEN 'varchar' THEN '('+CAST(CHARACTER_MAXIMUM_LENGTH AS varchar)+')' ELSE '' END) Declaration ,'@'+ UPPER(COLUMN_NAME)+' '+DATA_TYPE+(CASE DATA_TYPE WHEN 'numeric' THEN '('+CAST(NUMERIC_PRECISION AS varchar)+','+CAST(NUMERIC_PRECISION_RADIX AS varchar)+')' WHEN 'varchar' THEN '('+CAST(CHARACTER_MAXIMUM_LENGTH AS varchar)+')' ELSE '' END)+',' XMLDeclare ,'@'+COLUMN_NAME+',' Assign ,COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_PRECISION_RADIX 

我是这样做的

 SELECT TOP 0 * FROM Posts 

它甚至在http://data.stackexchange.com的服务表我不知道!;

 SELECT COLUMN_NAME FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName'