Boucle à travers plusieurs tables pour exécuter la même requête
J'ai une base de données dans laquelle par jour une table est créée pour le journal des instances de processus.
Les tables sont étiquetés MESSAGE_LOG_YYYYMMDD
Actuellement je veux séquentiellement exécuter la même REQUÊTE à l'encontre de tous ces tableaux.
J'ai écrit le code PL/SQL ci-dessous, mais est resté coincé à la ligne 10. Comment puis-je exécuter l'instruction SQL avec succès contre toutes les tables?
DECLARE
CURSOR all_tables IS
SELECT table_name
FROM all_tables
WHERE TABLE_NAME like 'MESSAGE_LOG_2%'
ORDER BY TABLE_NAME ;
BEGIN
FOR msglog IN all_tables LOOP
SELECT count(*) FROM TABLE msglog.TABLE_NAME ;
END LOOP;
END;
/
Si vous êtes en mesure de modifier le schéma de base de données et la logique d'application, il serait beaucoup mieux d'utiliser un seul tableau avec une colonne de date.
OriginalL'auteur pcvnes | 2011-03-16
Vous devez vous connecter pour publier un commentaire.
http://download.oracle.com/docs/cd/B10500_01/appdev.920/a96590/adg09dyn.htm
fondamentalement, à l'intérieur de votre boucle, de construire une chaîne de caractères représentant la requête que vous souhaitez exécuter, et l'utilisation de SQL dynamique pour exécuter la requête.
De faire quelque chose d'utile, vous allez probablement vouloir insérer des enregistrements dans une table temporaire, puis sélectionnez commandé par date dans l'ordre décroissant.
OriginalL'auteur Neville Kuyt
Il peut être préférable de re-architecte de la table à table avec une colonne de clé sur la journée pour le journal des processus plutôt que des tableaux.
Cela étant dit, vous pouvez utiliser le SQL Dynamique:
OriginalL'auteur N West
Utiliser exécution immédiate avec buld recueillir dans http://www.adp-gmbh.ch/ora/plsql/bc/execute_immediate.html . Concatinate vos tables avec l'union de tous, Oracle reconnaître l'union de tous à utiliser des requêtes en parallèle http://www.dba-oracle.com/art_opq1.htm .
OriginalL'auteur chris
Peut-être que vous devez mettre tous vos fichiers journaux dans un journal de tableau, l'ajout d'une colonne ou deux à différencier les différents jours (created_date ou created_timestamp colonne peut-être, + autres identificateurs vous le souhaitez). Vous pourriez même configuration du partitionnement, si nécessaire. Semble juste bizarre (et compliquée) pour suivre les journaux chaque jour par la création d'une nouvelle table pour chaque jours les journaux.
OriginalL'auteur tbone