Bonjour,
souhaitant comparer les nombres d'enregistrements de diverses tables, parfois sur d'autres schémas, j'ai fait un petit script plsql qui marche, mais pas comme je le souhaitais à l'origine:

J'ai plusieurs tableaux qui listent des noms de tables (en varchar2). Je compare le nombre de lignes des tables du même rang.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
    TYPE TABLE_TAB IS VARRAY (100) OF VARCHAR2(50);
    TAB_ODS TABLE_TAB := TABLE_TAB(  'NOM TABLE 1', 'NOM TABLE 2', ......);
Ce qui marche: un execute d'une requete construite à partir d'un tableau.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
   requete:='select count(*) from ' || TAB_ODS(I) ||  ' where OPERATION$=''I'' ';    
   execute immediate requete into nbLigne1;
Ce qui ne marche pas: un select direct.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
   select count(*) into nbLigne1 from TAB_ODS(I) where OPERATION$='I' ;
car bien sûr TAB_ODS(I) est considéré comme un nom de table et non une variable.

Je n'ai pas trouvé comment le faire marcher bien qu'ayant testé et cherché sur le net. Non pas que je ne puisse m'en passer, mais j'aimerais bien connaitre la solution.
De plus les noms de tables peuvent devoir être préfixées par un schema, ou suffixées par un dblink. Avec la 1ere méthode c'est facile, mais avec la seconde?

Bien cordialement