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. En este momento tengo todas las tablas en mi nuevo espacio de tabla, entonces, ¿especifico el nombre del espacio de tabla 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 un nombre de espacio de tabla, entonces, ¿eso es equivalente al nombre del esquema (lógicamente?)
and virtual_column = 'NO'
a mi consulta.La siguiente consulta funcionó para mí en la base de datos Oracle.
fuente
...WHERE LOWER(Table_Name) = 'mytablename';
.where lower(TABLE_NAME) = lower('WHATEVER')
, de lo contrario, cuando el nombre de la tabla tenga algún carácter en mayúscula, tampoco encontrará la tablaSELECT column_name FROM all_tab_cols WHERE UPPER(Table_Name) = UPPER('tablename');
funciona igual de bienlower(TABLE_NAME)
oupper(TABLE_NAME)
requiere que Oracle haga un escaneo de laALL_TAB_COLUMNS
tabla para obtener todos los valoresTABLE_NAME
antes de que pueda compararlo con el suministradoUPPER('MyTableName')
. En las pruebas rápidas esto hizo que el rendimiento fuera inutilizable para mi propósito, por lo que me atendré a las comparaciones entre mayúsculas y minúsculas.en Oracle puedes usar
para mostrar todas las columnas que contienen en la tabla de usuarios
fuente
desc users
responde mal a algunas preguntas, pero no es una buena respuesta para esta .Puede intentar esto: (Funciona en 11g y devuelve todos los nombres de columna de una tabla, aquí test_tbl es el nombre de la tabla y user_tab_columns son las columnas de la tabla permitidas por el usuario)
fuente
USER_TAB_COLUMNS
en realidad son las columnas de las tablas propiedad del usuario, no las de las tablas permitidas al usuario.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 aborden. ORM es un mapeo relacional de objetos, y lo que está buscando es un mapeo de metadatos ... No usaría HQL, sino métodos de API para este propósito, o SQL directo. Por ejemplo, puede usar JDBC DatabaseMetaData .
Creo que tablespace no tiene nada que ver con el esquema. Los espacios de tabla 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 el documento de Oracle .
fuente
TABLE_NAME='"+_db+".users'
fallará; necesita separar el propietario / esquema y el nombre de la tabla enALL_TAB_COLUMNS
La única forma en que pude obtener los nombres de columna fue mediante la siguiente consulta:
fuente
el punto es que en sapo tienes que escribir el nombre de la tabla capital, así:
fuente
Encuentro este útil en Oracle:
fuente
En varias ocasiones, necesitaríamos una lista separada por comas de todas las columnas de una tabla en un esquema. En tales casos, podemos usar esta función genérica que busca la lista separada por comas como una cadena.
Entonces, simplemente llamar a la función desde la consulta produce una fila con todas las columnas.
Nota:
LISTAGG
fallará si la longitud combinada de todas las columnas excede los4000
caracteres, lo cual es raro. Para la mayoría de los casos, esto funcionará.fuente
SELECT * FROM <SCHEMA_NAME.TABLE_NAME> WHERE ROWNUM = 0;
-> Tenga en cuenta que este es el resultado de la consulta, un conjunto de resultados. Esto es exportable a otros formatos. Y puede exportar el resultado de la consulta alText
formato. Exportar se ve a continuación cuando lo hiceSELECT * 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 "
DESCRIBE <TABLE_NAME>
-> Nota: Esta es la salida del script.fuente
Puede utilizar la consulta a continuación para obtener una lista de nombres de tabla que utiliza la columna específica en DB2:
Nota: Aquí reemplace el
COLUMN_NAME
con el nombre de la columna que está buscando.fuente
Puedes probar esto:
describe 'Nombre de tabla'
Devolverá todos los nombres de columna y tipos de datos
fuente