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

L'utilisation d'un SELECT dans une fonction de table PL/SQL en pipeline est-elle autorisée ?

  1. généralement les restrictions DML ne concernent que les instructions de modification (UPDATE, DELETE ...) donc SELECT devrait être OK. Je vais essayer de trouver une déclaration spécifique d'Oracle.

  2. Les vues seraient votre premier outil pour modulariser les requêtes couramment utilisées.

  3. Les fonctions ont un inconvénient par rapport aux vues :si elles sont appelées depuis un autre SELECT elles ne sont pas exécutées au même instant que le SELECT principal. Chaque appel à un SELECT est cohérent, mais comme les SELECT sont dans le code de la fonction et non dans le SQL principal, vous pouvez renvoyer des résultats incohérents. Ce n'est pas possible avec les vues et les sous-sélections :si une grosse instruction appelle une vue, la vue est construite au même moment que la requête principale.

Mettre à jour :concernant votre commentaire sur les requêtes paramétrées

Vous pouvez créer des vues paramétrées, c'est-à-dire des vues qui dépendent de variables définies avant l'exécution. Voici un exemple sur AskTom montrant comment vous pourriez le faire avec userenv('client_info') ou dbms_session.set_context .