我如何从Oracle中的表中获取列名?
我需要查询数据库来获取列名 ,而不是与表中的数据混淆。 例如,如果我有一个名为EVENT_LOG
的表包含EVENT_LOG
, 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')
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 COLUMN_NAME FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'YourTableName'