2012-12-17 3 views
0

J'ai deux sortes de tables. Le premier tri a un préfixe TBL$ et le second un préfixe LOG$. S'il existe un tableau LOG$TABLE_NAME, il existe également une table TBL$TABLE_NAME. Car les tables LOG$ sont générées à partir des tables TBL$. Le problème est quand je veux rechercher toutes les tables d'utilisateur du tableau d'oracles USER_TABLES. Je veux rechercher par nom seulement les tables TBL$ avec 2 paramètres. Le premier est le nom, et le second est une chaîne ('OUI' ou 'NON') qui indique si la table recherchée a une table LOG$ correspondante. Sans ce second paramètre, ma requête a l'air si:Requête avancée dans Oracle db

SELECT ut.table_name AS id, 
     utc.comments AS comments 
    FROM user_tables ut 
    LEFT JOIN user_tab_comments utc 
    ON ut.table_name = utc.table_name 
WHERE SUBSTR(UPPER(ut.table_name), 1, 4) = 'TBL$' 
    AND TRIM(UPPER(ut.table_name)) LIKE TRIM(UPPER('%'|| :table_name ||'%')) 

Donc, si vous pouviez me aider à itegrate ce second paramètre dans la requête, il serait grand.

+2

Quel problème rencontrez-vous avec la requête? – chuff

Répondre

2

Vous pourriez faire une auto-jointure et vérifier externe gauche pour l'existence:

SELECT 
    ut.table_name AS id 
, CASE WHEN ut_log.table_name IS NOT NULL THEN 'YES' ELSE 'NO' END has_log 
FROM user_tables ut 
LEFT JOIN user_tables ut_log ON ut_log.table_name = replace(ut.table_name, 'TBL$', 'LOG$') 
WHERE SUBSTR(UPPER(ut.table_name), 1, 4) = 'TBL$'