我需要查询数据库以获取列名,而不是与表中的数据混淆.举例来说,如果我有一个名为表中EVENT_LOG
包含eventID
,eventType
,eventDesc
,和eventTime
,然后我会想检索查询,并没有其他的字段名.
我找到了如何做到这一点:
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')
类型='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的解释:
该pragma为命名表中的每列返回一行.结果集中的列包括列名,数据类型,列是否可以为NULL以及列的默认值.对于不属于主键的列,结果集中的"pk"列为零,并且是主键中作为主键一部分的列的列的索引.
另请参见:Sqlite.org Pragma表信息
该信息存储在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)
其他答案足以回答这个问题,但我想我会分享一些额外的信息.其他人描述"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';
可能并不重要,但我早些时候写了它似乎很合适.