J'ai une requête mySQL pour obtenir des colonnes d'une table comme celle-ci:
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')"
Comment modifier la requête ci-dessus dans la base de données Oracle 11g? J'ai besoin d'obtenir les noms de colonnes comme ensemble de résultats pour les «utilisateurs» de la table à l'exclusion de certaines colonnes, en spécifiant un schéma. À l'heure actuelle, j'ai toutes les tables dans mon nouvel espace de table, alors dois-je spécifier le nom de l'espace de table à la place du nom de schéma?
Existe-t-il également un HQL générique pour cela? Dans ma nouvelle base de données Oracle (je suis nouveau sur Oracle), je n'ai que le nom de l'espace de table, donc est-ce équivalent au nom du schéma (logiquement?)
and virtual_column = 'NO'
à ma requête.La requête ci-dessous a fonctionné pour moi dans la base de données Oracle.
la source
...WHERE LOWER(Table_Name) = 'mytablename';
.where lower(TABLE_NAME) = lower('WHATEVER')
, sinon quand le nom de la table a un caractère majuscule, il ne trouvera pas non plus la tableSELECT column_name FROM all_tab_cols WHERE UPPER(Table_Name) = UPPER('tablename');
fonctionne aussi bien.lower(TABLE_NAME)
ouupper(TABLE_NAME)
requiert qu'oracle effectue une analyse de table de laALL_TAB_COLUMNS
table pour obtenir toutes les valeursTABLE_NAME
avant de pouvoir la comparer à celle fournieUPPER('MyTableName')
. Lors de tests rapides, cela a rendu les performances inutilisables pour mon objectif, je vais donc m'en tenir à des comparaisons sensibles à la casse.dans Oracle, vous pouvez utiliser
pour afficher toutes les colonnes contenant dans le tableau des utilisateurs
la source
desc users
une mauvaise réponse à certaines questions, mais ce n'est pas une bonne réponse à celle-ci .Vous pouvez essayer ceci: (Cela fonctionne sur 11g et il renvoie tous les noms de colonnes d'une table, ici test_tbl est le nom de la table et user_tab_columns sont les colonnes de la table autorisée par l'utilisateur)
la source
USER_TAB_COLUMNS
sont en fait les colonnes des tables appartenant à l'utilisateur, et non celles des tables autorisées à l'utilisateur.La requête à utiliser avec Oracle est:
String sqlStr="select COLUMN_NAME from ALL_TAB_COLUMNS where TABLE_NAME='"+_db+".users' and COLUMN_NAME not in ('password','version','id')"
Jamais entendu parler de HQL pour de telles requêtes. Je suppose que cela n'a pas de sens pour les implémentations ORM de le gérer. ORM est un mappage relationnel d'objet, et ce que vous recherchez, c'est le mappage de métadonnées ... Vous n'utiliserez pas HQL, utilisez plutôt des méthodes API à cette fin, ou direct SQL. Par exemple, vous pouvez utiliser JDBC DatabaseMetaData .
Je pense que l'espace de table n'a rien à voir avec le schéma. Les tablespaces AFAIK sont principalement utilisés à des fins techniques internes logiques qui devraient déranger les DBA. Pour plus d'informations sur les tablespaces, consultez le doc Oracle .
la source
TABLE_NAME='"+_db+".users'
échouera; vous devez séparer le propriétaire / schéma et le nom de la table dansALL_TAB_COLUMNS
La seule façon dont j'ai pu obtenir les noms de colonnes était d'utiliser la requête suivante:
la source
le fait est que dans toad, vous devez écrire le nom de la table en majuscule, comme ceci:
la source
Je trouve celui-ci utile dans Oracle:
la source
À plusieurs reprises, nous aurions besoin d'une liste séparée par des virgules de toutes les colonnes d'une table dans un schéma. Dans de tels cas, nous pouvons utiliser cette fonction générique qui récupère la liste séparée par des virgules sous forme de chaîne.
Ainsi, le simple fait d'appeler la fonction à partir de la requête produit une ligne avec toutes les colonnes.
Remarque:
LISTAGG
échouera si la longueur combinée de toutes les colonnes dépasse les4000
caractères, ce qui est rare. Dans la plupart des cas, cela fonctionnera.la source
SELECT * FROM <SCHEMA_NAME.TABLE_NAME> WHERE ROWNUM = 0;
-> Notez qu'il s'agit du résultat de la requête, un ResultSet. Ceci est exportable vers d'autres formats. Et, vous pouvez exporter le résultat de la requête auText
format. L'exportation ressemble à ci-dessous quand je l'ai faitSELECT * 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>
-> Remarque: il s'agit d'une sortie de script.la source
Vous pouvez utiliser la requête ci-dessous pour obtenir une liste des noms de table qui utilisent la colonne spécifique dans DB2:
Remarque: remplacez ici le
COLUMN_NAME
par le nom de la colonne que vous recherchez.la source
Vous pouvez essayer ceci:
décrire 'Nom de la table'
Il renverra tous les noms de colonnes et types de données
la source