Eu tenho uma consulta mySQL para obter colunas de uma tabela 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')"
Como altero a consulta acima no banco de dados Oracle 11g? Preciso obter nomes de colunas como um conjunto de resultados para a tabela 'usuários' excluindo determinadas colunas, especificando um esquema. No momento, tenho todas as tabelas no meu novo espaço de tabela; portanto, especifique o nome do espaço de tabela no lugar do nome do esquema?
Também existe um HQL genérico para isso? No meu novo banco de dados Oracle (sou novo no Oracle), tenho apenas o nome do espaço de tabela; isso é equivalente ao nome do esquema (logicamente?)
and virtual_column = 'NO'
à minha consulta.A consulta abaixo funcionou para mim no banco de dados Oracle.
fonte
...WHERE LOWER(Table_Name) = 'mytablename';
.where lower(TABLE_NAME) = lower('WHATEVER')
, caso contrário, quando o nome da tabela tiver algum caractere maiúsculo, também não encontrará a tabela #SELECT column_name FROM all_tab_cols WHERE UPPER(Table_Name) = UPPER('tablename');
funciona tão bem.lower(TABLE_NAME)
ouupper(TABLE_NAME)
requer que o oracle faça uma varredura daALL_TAB_COLUMNS
tabela para obter todos os valoresTABLE_NAME
antes que possa compará-la com o fornecidoUPPER('MyTableName')
. Em testes rápidos, isso tornava o desempenho inutilizável para o meu objetivo, para que eu fique com comparações que diferenciam maiúsculas de minúsculas.no oracle você pode usar
para exibir todas as colunas que contêm na tabela de usuários
fonte
desc users
uma resposta ruim para algumas perguntas, mas não é uma boa resposta para essa pergunta .Você pode tentar o seguinte: (Funciona com 11g e retorna todo o nome da coluna de uma tabela, aqui test_tbl é o nome da tabela e user_tab_columns são colunas da tabela permitida pelo usuário)
fonte
USER_TAB_COLUMNS
são, na verdade, as colunas das tabelas pertencentes ao usuário, não as das tabelas permitidas ao usuário.A consulta a ser usada com o Oracle é:
String sqlStr="select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='"+_db+".users' and COLUMN_NAME not in ('password','version','id')"
Nunca ouvi falar do HQL para essas consultas. Presumo que não faça sentido para implementações ORM lidar com isso. ORM é um mapeamento relacional de objetos, e o que você está procurando é o mapeamento de metadados ... Você não usaria HQL, em vez disso, utilizaria métodos de API para esse fim ou SQL direto. Por exemplo, você pode usar o JDBC DatabaseMetaData .
Eu acho que o espaço de tabela não tem nada a ver com esquema. Os espaços de tabela AFAIK são usados principalmente para fins técnicos internos lógicos que devem incomodar os DBAs. Para obter mais informações sobre espaços de tabela, consulte Oracle doc .
fonte
TABLE_NAME='"+_db+".users'
vai falhar; você precisa separar proprietário / esquema e nome da tabela noALL_TAB_COLUMNS
A única maneira de obter os nomes das colunas foi usando a seguinte consulta:
fonte
o ponto é que, no sapo, você deve escrever o nome da tabela em maiúscula, assim:
fonte
Acho este útil no Oracle:
fonte
Em várias ocasiões, precisaríamos de uma lista separada por vírgula de todas as colunas de uma tabela em um esquema. Nesses casos, podemos usar essa função genérica que busca a lista separada por vírgulas como uma string.
Portanto, simplesmente chamar a função da consulta gera uma linha com todas as colunas.
Nota:
LISTAGG
falhará se o comprimento combinado de todas as colunas exceder4000
caracteres, o que é raro. Na maioria dos casos, isso funcionará.fonte
SELECT * FROM <SCHEMA_NAME.TABLE_NAME> WHERE ROWNUM = 0;
-> Observe que este é o Resultado da consulta, um ResultSet. Isso é exportável para outros formatos. E você pode exportar o resultado da consulta para oText
formato. A exportação se parece abaixo quando eu fizSELECT * 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 é a saída do script.fonte
Você pode usar a consulta abaixo para obter uma lista de nomes de tabelas que usam a coluna específica no DB2:
Nota: Substitua aqui pelo
COLUMN_NAME
nome da coluna que você está procurando.fonte
Você pode tentar isso:
descrever 'Nome da tabela'
Ele retornará todos os nomes de colunas e tipos de dados
fonte