2010-09-08 3 views
0

J'utilise Oracle DB et j'aimerais écrire une requête SQL que je pourrais ensuite appeler avec JDBC. Je ne suis pas très familier avec SQL donc si quelqu'un peut m'aider, ça pourrait être génial! Voici le problème. J'ai une table MY_TABLE qui contient une liste d'autres tables, et je voudrais garder seulement les tables non vides et celles dont le nom commence par une chaîne particulière. La requête que j'ai écrit est la suivante:SQL/JDBC: sélection de requête sur les noms de tables variables

select TABLE_NAME 
from MY_TABLE 
where TABLE_NAME like '%myString%' 
and (select count(*) from TABLE_NAME where rownum=1)<>0 
order by TABLE_NAME;` 

Le problème vient de la deuxième SELECT, mais je ne sais pas comment puis-je faire pour utiliser la valeur TABLE_NAME.

Quelqu'un a-t-il une idée?

Merci.


[Ajout de commentaires]

En fait, je dois tester les V vues de $ figurant dans le tableau ALL_CATALOG. Mais si je peux trouver une autre table où toutes ces vues sont aussi contenues et avec une colonne NUM_ROWS aussi, ce serait parfait!

+0

Il y a un problème dans votre modèle de données. C'est au moins pas lié à JDBC, c'est juste un "messager" pour déclencher et traiter des requêtes SQL en utilisant Java. J'ai donc retiré l'étiquette. – BalusC

+0

Ne peut pas être fait; ne devrait pas être fait. – duffymo

+0

@duffymo: pourquoi? Pourquoi ? – user442462

Répondre

1

Pouvez-vous utiliser Oracle view USER_TABLES? alors la requête sera beaucoup plus facile

select TABLE_NAME 
from USER_TABLES 
where TABLE_NAME like '%myString%' 
and Num_ROWS > 0 
order by TABLE_NAME;` 
+0

En fait, j'ai besoin de tester les vues V $ contenues dans la table ALL_CATALOG. Mais si je peux trouver une autre table où toutes ces vues sont aussi contenues et avec une colonne NUM_ROWS aussi, ce serait parfait! – user442462

2

versions standard de SQL ne vous permettent pas de remplacer les « éléments structurels » de la requête, comme le nom de la table ou le nom de la colonne, avec des valeurs variables ou lieu détenteurs.

Il y a plusieurs façons d'aborder cela.

  1. Générez une instruction SQL distincte pour chaque nom de table répertorié dans MY_TABLE et exécutez-les l'un après l'autre. Force brute, mais efficace.
  2. Interrogez directement le catalogue système.
  3. Étudiez s'il existe des opérations de métadonnées JDBC qui vous permettent de connaître le nombre de lignes d'une table sans être liées au catalogue système du SGBD que vous utilisez.
+0

1. J'ai fait quelque chose de similaire la première fois, ça marche mais ça prend environ 20 secondes pour être exécuté. Mon objectif est de réduire ce temps d'exécution. 2. En fait, MY_TABLE est la table ALL_CATALOG. 3. Les opérations de métadonnées JDBC ne donnent que des informations sur les colonnes, pas sur les lignes ... – user442462

Questions connexes