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.
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 TYPE TABLE_TAB IS VARRAY (100) OF VARCHAR2(50); TAB_ODS TABLE_TAB := TABLE_TAB( 'NOM TABLE 1', 'NOM TABLE 2', ......);
Ce qui ne marche pas: un select direct.
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;
car bien sûr TAB_ODS(I) est considéré comme un nom de table et non une variable.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 select count(*) into nbLigne1 from TAB_ODS(I) where OPERATION$='I' ;
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
Partager