How can I get column names from a table in Oracle?
我需要查询数据库以获取列名,而不是与表中的数据混淆。 例如,如果我有一个名为
我找到了如何做到这一点:
- Microsoft SQL Server
- MySQL的
- PostgreSQL的
但我需要知道:如何在Oracle中完成这项工作?
您可以在USER_TAB_COLUMNS表中查询表列元数据。
1 2 3 | SELECT TABLE_NAME, column_name, data_type, data_length FROM USER_TAB_COLUMNS WHERE TABLE_NAME = 'MYTABLE' |
在SQL Server中......
1 2 3 | SELECT [name] AS [COLUMN Name] FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE TYPE = 'V' AND [Name] = 'Your table name') |
对于视图,键入='V'
表格类型='U'
你可以这样做:
1 | DESCRIBE EVENT_LOG |
要么
1 | DESC EVENT_LOG |
注意:仅在您知道表名且特别是Oracle时才适用。
对于SQL Server 2008,我们可以使用information_schema.columns来获取列信息
1 2 3 4 | SELECT * FROM information_schema.columns WHERE TABLE_NAME = 'Table_Name' ORDER BY ordinal_position |
对于SQLite,我相信你可以使用如下内容:
1 | PRAGMA table_info(table-name); |
来自sqlite.org的解释:
该pragma为命名表中的每列返回一行。结果集中的列包括列名,数据类型,列是否可以为NULL以及列的默认值。对于不属于主键的列,结果集中的"pk"列为零,并且是主键中作为主键一部分的列的列的索引。
另请参见:Sqlite.org Pragma表信息
该信息存储在
1 2 3 | SQL> SELECT column_name FROM all_tab_columns WHERE TABLE_NAME = 'DUAL'; DUMMY |
或者,如果您使用SQL * PLUS,则可以
1 2 3 4 | SQL> DESC dual Name NULL? TYPE ----------------------------------------------------- -------- ---------------------- ------------- DUMMY VARCHAR2(1) |
其他答案足以回答这个问题,但我想我会分享一些额外的信息。其他人描述"DESCRIBE表"语法以获取表信息。如果您想以相同的格式获取信息,但不使用DESCRIBE,您可以:
1 2 3 | 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'; |
可能并不重要,但我早些时候写了它似乎很合适。
1 2 3 | SELECT column_name,* FROM information_schema.columns WHERE TABLE_NAME = 'YourTableName' ORDER BY ordinal_position |
对于MySQL,请使用
1 2 3 4 | SELECT column_name FROM information_schema.columns WHERE table_schema = 'Schema' AND TABLE_NAME = 'Table_Name' |
1 | DESCRIBE YOUR_TABLE; |
在你的情况下:
1 | DESCRIBE EVENT_LOG; |
对于Oracle
1 | SELECT column_name FROM user_tab_cols WHERE TABLE_NAME=UPPER('tableName'); |
对于SQL Server:
1 2 3 | SELECT [name] AS [COLUMN Name] FROM syscolumns WHERE id = object_id('TABLE_NAME') |
即使这也是我们使用它的方式之一
1 | SELECT * FROM product WHERE 1 != 1 |
1 2 3 | SELECT COLUMN_NAME 'all_columns' FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='user'; |
在Oracle中,有两个描述列的视图:
-
DBA_TAB_COLUMNS描述了所有表,视图和列的列
数据库中的集群。 -
USER_TAB_COLUMNS描述了表,视图和列的列
当前用户拥有的集群。此视图不显示
OWNER专栏。
你也可以试试这个,但它可能比你需要的更多信息:
1 | sp_columns TABLE_NAME |
Mysql的
1 | SHOW COLUMNS FROM a_table_named_users WHERE FIELD REGEXP 'user_id|user_name|user_pass' |
这将返回如下结果:
1 2 3 4 | 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 |
然后,您可以简单地提取值
1 | fetch ROW[0] |
这对于动态传递输入也很有用,因为REGEXP需要'|'对于多个输入,但也是一种保持数据分离并易于存储/传递给类/函数的方法。
尝试在发送时输入虚拟数据以确保安全性,并比较接收任何错误时返回的内容。
1 2 3 | 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' |
你可以运行这个查询
1 2 3 4 5 6 7 | 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; |
答案在这里:http://php.net/manual/en/function.mysql-list-fields.php
我会在你的情况下使用以下代码:
1 2 3 4 5 6 7 8 9 10 11 | $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']; } } |
只需从表中选择第一行,即oracle:
1 2 3 4 | SELECT ColumnName FROM DBC.Columns WHERE DatabaseName='DBASE_NAME' AND TableName='TABLE_NAME'; |
信息存储在DBC dbase中。
获取数据类型涉及更多:
使用teradata系统表获取列类型
试试这个
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%' |
我是这样做的
1 2 3 4 5 | SELECT TOP 0 * FROM Posts |
它甚至可以在我不知道服务表的http://data.stackexchange.com中运行!
1 2 3 | SELECT COLUMN_NAME FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName' |