¿Cómo puedo obtener los nombres de columna de una tabla en Oracle?


184

Necesito consultar la base de datos para obtener los nombres de las columnas , no confundirlos con los datos de la tabla. Por ejemplo, si tengo una tabla llamada EVENT_LOGque contiene eventID, eventType, eventDesc, y eventTime, a continuación, me gustaría recuperar esos nombres de los campos de la consulta y nada más.

Encontré cómo hacer esto en:

Pero necesito saber: ¿cómo se puede hacer esto en Oracle ?

Respuestas:


191

Puede consultar en la tabla USER_TAB_COLUMNS los metadatos de la columna de la tabla.

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

21
Tenga en cuenta que esto es específico de Oracle.
Preocupado por

8
¿Hay alguna razón por la cual esto podría devolver "no hay filas seleccionadas"? (En Oracle.)
Ian R. O'Brien

9
Si no ha seleccionado ninguna fila, puede intentar cambiar USER_TAB_COLUMNSa all_tab_columns. Para estar 100% seguro sobre el resultado, puede especular al propietario.
Dracontis

2
Puede agregar "ORDER by column_id" en caso de que desee recuperarlos en el mismo orden en que se crearon en la tabla. Aquí hay algunos otros datos de columna relevantes de la tabla docs.oracle.com/cd/B19306_01/server.102/b14237/…
Bernauer

2
Asegúrese de que el nombre de la tabla esté en mayúscula.
Hugh Seagraves

67

En SQL Server ...

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

Tipo = 'V' para vistas Tipo = 'U' para tablas


39

Puedes hacerlo:

describe EVENT_LOG

o

desc EVENT_LOG

Nota: solo aplicable si conoce el nombre de la tabla y específicamente para Oracle.


26

Para SQL Server 2008, podemos usar information_schema.columns para obtener información de columna

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

1
Tenga en cuenta que las INFORMATION_SCHEMAtablas son las tablas de metadatos estándar ANSI. Cualquier buen RDBMS moderno los tendrá.
Bacon Bits

18

Para SQLite, creo que puede usar algo como lo siguiente:

PRAGMA table_info(table-name);

Explicación de sqlite.org:

Este pragma devuelve una fila para cada columna en la tabla con nombre. Las columnas en el conjunto de resultados incluyen el nombre de la columna, el tipo de datos, si la columna puede ser NULL o no, y el valor predeterminado para la columna. La columna "pk" en el conjunto de resultados es cero para las columnas que no forman parte de la clave primaria, y es el índice de la columna en la clave primaria para las columnas que forman parte de la clave primaria.

Ver también: Sqlite.org Pragma Table Info


1
No estoy seguro de por qué fui rechazado tampoco, pero me alegro de que te haya ayudado.
Shieldstroy

2
Puede haber sido rechazado porque la pregunta está etiquetada como Oracle.
Burhan Ali

2
Eliminé la etiqueta de Oracle y voté por esto: pensé que, dado que hay tantas respuestas, esta pregunta funciona mejor como una general. (Vine aquí buscando el mySQL.)
icedwater

16

Esa información se almacena en la ALL_TAB_COLUMNStabla del sistema:

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

DUMMY

O podría DESCRIBEusar la tabla si está utilizando SQL * PLUS:

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

Documentación oficial a ALL_TAB_COLUMNStravés de la Referencia oficial de Oracle Database . Esta vista describe las columnas de las tablas, vistas y clústeres accesibles para el usuario actual.
Sr. Polywhirl

Pero no podemos dar el nombre del esquema delante de la mesa, ¿verdad? por ejemplo si quiero así select column_name from all_tab_columns where table_name = 'dbo.usertbl';
AhammadaliPK

9

Las otras respuestas responden suficientemente la pregunta, pero pensé que compartiría información adicional. Otros describen la sintaxis "DESCRIBIR tabla" para obtener la información de la tabla. Si desea obtener la información en el mismo formato, pero sin usar DESCRIBE, puede hacer lo siguiente:

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

Probablemente no importa mucho, pero lo escribí antes y parece encajar.


Al intentar esto ahora (años más tarde) en SQL Server 2008, recibo un Incorrect Syntax near '|'error
Al Lelopath

4

Para Oracle

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

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

funciona esta consulta, con la especificación de un nombre de columna y estrella- "seleccione column_name, *" .. No funciona en Oracle.
Teja

3
describe YOUR_TABLE;

En tu caso :

describe EVENT_LOG;

3

Para MySQL, use

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

3

Incluso esta es también una de las formas en que podemos usarlo

select * from product where 1 != 1

2

Para SQL Server:

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

2
SELECT COLUMN_NAME 'all_columns' 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME='user';

Bienvenido a Stack Overflow @expert one. Incluso si su respuesta parece ser precisa, agregue más detalles y explicaciones que solo el 'código'. Sería más claro para todos.
Jean-Rémy Revy

1

También podría intentar esto, pero podría ser más información de la que necesita:

sp_columns TABLE_NAME

1

Mysql

SHOW COLUMNS FROM a_table_named_users WHERE Field REGEXP 'user_id|user_name|user_pass'

Esto devolverá un resultado algo como esto:

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

Luego, para extraer los valores, simplemente puede

fetch row[0]

Esto también es excelente para pasar entradas dinámicamente ya que REGEXP necesita el '|' para múltiples entradas, pero también es una forma de mantener los datos separados y fáciles de almacenar / pasar a clases / funciones.

Intente incluir datos ficticios también por seguridad al enviarlos y compare lo que se devolvió al recibir cualquier error.


1

En Oracle, hay dos vistas que describen columnas:

  • DBA_TAB_COLUMNS describe las columnas de todas las tablas, vistas y clústeres en la base de datos.

  • USER_TAB_COLUMNS describe las columnas de las tablas, vistas y
    clústeres propiedad del usuario actual. Esta vista no muestra la
    columna PROPIETARIO.


0

La respuesta está aquí: http://php.net/manual/en/function.mysql-list-fields.php . Usaría el siguiente código en su caso:

$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'];
    }
}

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

0

puedes ejecutar esta consulta

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;

-1

Simplemente seleccione la primera fila de la tabla, para Oracle: select * from <table name> where rownum = 1;


¿Qué significa rownum? ¿Necesito usar una columna llamada rownum?
merve bıçakçı

-1

Encontré esta pregunta buscando acceso a los nombres de columna en Teradata, así que agregaré la respuesta para su 'sabor' de SQL:

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

La información se almacena en la base de datos DBC.

Obtener tipos de datos es un poco más complicado: obtener el tipo de columna usando tablas del sistema teradata


-1

Prueba esto

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


-3
SELECT COLUMN_NAME 
FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_NAME = 'YourTableName'
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.