una transponer registros multiple filas ejemplos dinamico convertir concatenar columns columnas columna 10g sql database oracle

sql - transponer - pivot oracle columns to rows



¿Cómo puedo obtener los nombres de las columnas de una tabla en Oracle? (26)

Consulta para seleccionar detalles de columna en SQL 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

Necesito consultar la base de datos para obtener los nombres de las columnas , para no confundirlos con los datos de la tabla. Por ejemplo, si tengo una tabla llamada EVENT_LOG que contiene eventID , eventType , eventDesc y eventTime , entonces quisiera recuperar esos nombres de campo de la consulta y nada más.

Encontré cómo hacer esto en:

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


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
    clusters propiedad del usuario actual. Esta vista no muestra el
    Columna PROPIETARIO.


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


Esa información se almacena en la tabla del sistema ALL_TAB_COLUMNS :

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

O podría DESCRIBE la tabla si está usando SQL * PLUS:

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


Incluso esta es también una de las maneras en que podemos usarla

select * from product where 1 != 1


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


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

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 importe mucho, pero lo escribí antes y parece encajar.



Me encontré con 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 DBC dbase.

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


Mysql

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

Esto devolverá un resultado como este:

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, puede simplemente

fetch row[0]

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

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


Para MySQL, use

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


Para Oracle

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


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


Para SQL Server:

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


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 nombrada. 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 son parte de la clave principal, y es el índice de la columna en la clave principal para las columnas que forman parte de la clave principal.

Ver también: Sqlite.org Pragma Table Info


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


Puede consultar la tabla USER_TAB_COLUMNS para 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''


Puedes hacerlo:

describe EVENT_LOG

o

desc EVENT_LOG

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


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


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

sp_columns TABLE_NAME


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;


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 COLUMN_NAME FROM YourDatabase.INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = ''YourTableName''


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


describe YOUR_TABLE;

En tu caso :

describe EVENT_LOG;


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