transponer registros multiple filas excluir developer consultas consulta columns columnas columna 10g sql oracle

sql - registros - Consulta de Oracle para recuperar nombres de columnas



pivot oracle columns to rows (11)

  1. SELECT * FROM <SCHEMA_NAME.TABLE_NAME> WHERE ROWNUM = 0; -> Tenga en cuenta que esto es Resultado de consulta, un ResultSet. Esto es exportable a otros formatos. Y puede exportar el resultado de la consulta al formato de Text . La exportación se ve a continuación cuando seleccioné SELECT * FROM SATURN.SPRIDEN WHERE ROWNUM = 0; :

    "SPRTELE_PIDM" "SPRTELE_SEQNO" "SPRTELE_TELE_CODE" "SPRTELE_ACTIVITY_DATE" "SPRTELE_PHONE_AREA" "SPRTELE_PHONE_NUMBER" "SPRTELE_PHONE_EXT" "SPRTELE_STATUS_IND" "SPRTELE_ATYP_CODE" "SPRTELE_ADDR_SEQNO" "SPRTELE_PRIMARY_IND" "SPRTELE_UNLIST_IND" "SPRTELE_COMMENT" "SPRTELE_INTL_ACCESS" "SPRTELE_DATA_ORIGIN" "SPRTELE_USER_ID" "SPRTELE_CTRY_CODE_PHONE "" SPRTELE_SURROGATE_ID "" SPRTELE_VERSION "" SPRTELE_VPDI_CODE "

  2. DESCRIBE <TABLE_NAME> -> Nota: Este es un resultado de script.

Tengo una consulta mySQL para obtener columnas de una tabla como esta:

String sqlStr="select column_name from information_schema.COLUMNS where table_name=''users'' and table_schema=''"+_db+"'' and column_name not in (''password'',''version'',''id'')"

¿Cómo cambio la consulta anterior en la base de datos Oracle 11g? Necesito obtener nombres de columnas como un conjunto de resultados para la tabla ''usuarios'' excluyendo ciertas columnas, especificando un esquema. Ahora mismo tengo todas las tablas en mi nuevo espacio de tabla, así que ¿especifico el nombre del espacio de tablas en lugar del nombre del esquema?

También hay un HQL genérico para esto? En mi nueva base de datos Oracle (soy nuevo en Oracle), solo tengo el nombre de espacio de tabla, ¿es equivalente al nombre de esquema (lógicamente?)


El equivalente de Oracle para information_schema.COLUMNS es USER_TAB_COLS para tablas propiedad del usuario actual, ALL_TAB_COLS o DBA_TAB_COLS para tablas propiedad de todos los usuarios.

Tablespace no es equivalente a un esquema, tampoco debe proporcionar el nombre del espacio de tabla.

Proporcionar el esquema / nombre de usuario sería útil si desea consultar ALL_TAB_COLS o DBA_TAB_COLS para columnas de tablas propiedad de un usuario específico. en su caso, me imagino que la consulta se vería algo así como:

String sqlStr= " SELECT column_name FROM all_tab_cols WHERE table_name = ''USERS'' AND owner = ''" +_db+ "'' AND column_name NOT IN ( ''PASSWORD'', ''VERSION'', ''ID'' )"

Tenga en cuenta que con este enfoque, corre el riesgo de inyección SQL.

EDITAR: Alineó los nombres de tabla y columna ya que estos son típicamente mayúsculas en Oracle; solo son un caso menor o mixto si se crean con comillas dobles a su alrededor.


En varias ocasiones, necesitaríamos una lista separada por comas de todas las columnas de una tabla en un esquema. En tales casos, podemos utilizar esta función genérica que recupera la lista separada por comas como una cadena.

CREATE OR REPLACE FUNCTION cols( p_schema_name IN VARCHAR2, p_table_name IN VARCHAR2) RETURN VARCHAR2 IS v_string VARCHAR2(4000); BEGIN SELECT LISTAGG(COLUMN_NAME , '','' ) WITHIN GROUP ( ORDER BY ROWNUM ) INTO v_string FROM ALL_TAB_COLUMNS WHERE OWNER = p_schema_name AND table_name = p_table_name; RETURN v_string; END; /

Por lo tanto, simplemente llamando a la función desde la consulta produce una fila con todas las columnas.

select cols(''HR'',''EMPLOYEES'') FROM DUAL; EMPLOYEE_ID,FIRST_NAME,LAST_NAME,EMAIL,PHONE_NUMBER,HIRE_DATE,JOB_ID,SALARY,COMMISSION_PCT,MANAGER_ID,DEPARTMENT_ID

Nota: LISTAGG fallará si la longitud combinada de todas las columnas supera los 4000 caracteres, lo cual es raro. Para la mayoría de los casos, esto funcionará.


Encuentro esto útil en Oracle:

SELECT obj.object_name, atc.column_name, atc.data_type, atc.data_length FROM all_tab_columns atc, (SELECT * FROM all_objects WHERE object_name like ''GL_JE%'' AND owner = ''GL'' AND object_type in (''TABLE'',''VIEW'') ) obj WHERE atc.table_name = obj.object_name ORDER BY obj.object_name, atc.column_name;


La única forma en que pude obtener los nombres de las columnas fue usando la siguiente consulta:

select COLUMN_NAME FROM all_tab_columns atc WHERE table_name like ''USERS''


La consulta para usar con Oracle es:

String sqlStr="select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME=''"+_db+".users'' and COLUMN_NAME not in (''password'',''version'',''id'')"

Nunca he oído hablar de HQL para tales consultas. Supongo que no tiene sentido que las implementaciones de ORM lo solucionen. ORM es un mapeo relacional de objetos, y lo que está buscando es la asignación de metadatos ... No usaría HQL, más bien usaría métodos de API para este propósito o dirigiría SQL. Por ejemplo, puede usar JDBC DatabaseMetaData .

Creo que tablespace no tiene nada que ver con el esquema. Los espacios de tabla de AFAIK se utilizan principalmente para fines técnicos internos lógicos que deberían molestar a los DBA. Para obtener más información sobre los espacios de tabla, consulte Oracle doc .


La siguiente consulta me funcionó en la base de datos Oracle.

select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME=''MyTableName'';


Puede intentar esto: (Funciona en 11g y devuelve todo el nombre de columna de una tabla, aquí test_tbl es el nombre de la tabla y user_tab_columns son columnas de la tabla permitidas por el usuario)

select COLUMN_NAME from user_tab_columns where table_name=''test_tbl'';


Puede usar la consulta siguiente para obtener una lista de nombres de tabla que utiliza la columna específica en DB2:

SELECT TBNAME FROM SYSIBM.SYSCOLUMNS WHERE NAME LIKE ''%COLUMN_NAME'';

Nota: aquí reemplace COLUMN_NAME con el nombre de la columna que está buscando.


Puedes intentar esto:

describir ''Nombre de tabla''

Devolverá todos los nombres de columna y tipos de datos


en Oracle puedes usar

desc users

para mostrar todas las columnas que contienen en la tabla de usuarios