Oracle
 sql >> Base de données >  >> RDS >> Oracle

Une requête Oracle SQL peut-elle exécuter une requête de chaîne sélectionnée dans une table ?

Généralement, ce n'est pas une conception particulièrement bonne - stocker SQL dans des tables et l'exécuter dynamiquement introduit toutes sortes de problèmes de sécurité et de maintenance.

Il est probablement possible (bien qu'il soit trop tard un vendredi qui a commencé bien trop tôt pour que j'essaie de comprendre) de faire une requête XML vraiment cool du type cette requête qui exécute un comptage (*) sur chaque table du schéma qui ferait tout cela en une seule requête.

Pour la grande majorité des programmeurs, cependant, l'approche la plus simple serait de boucler les requêtes, de les exécuter une par une et de stocker les résultats quelque part. Potentiellement, la variable locale serait ajoutée à une collection de comptages, par exemple.

FOR q IN (SELECT sql_text FROM query_table)
LOOP
  EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM (' || q.sql_text || ')'
     INTO some_local_variable;
  <<do something with the local variable>>
END LOOP;

Puisque vous essayez de créer une vue, vous pouvez prendre cette logique et la mettre dans une fonction de table en pipeline. Vous feriez un PIPE ROW pour renvoyer des données dans la boucle. Votre vue pourrait alors être créée au-dessus de la fonction de table en pipeline.