-
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.
-
Les vues seraient votre premier outil pour modulariser les requêtes couramment utilisées.
-
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
.