Est-il possible d'écrire une requête PL/SQL pour identifier une liste complète des dépendances de procédures stockées? Je ne suis intéressé que par l'identification d'autres procédures stockées et je préfère ne pas limiter la profondeur de l'imbrication. Par exemple, si A appelle B, qui appelle C, qui appelle D, j'aimerais que B, C et D soient signalés comme dépendances pour A.Comment identifiez-vous par programme les dépendances d'une procédure stockée?
Répondre
Sur this page, vous trouverez la requête suivante qui utilise la table de dictionnaire PUBLIC_DEPENDENCY :
SELECT lvl
, u.object_id
, u.object_type
, LPAD (' ', lvl) || object_name obj
FROM (SELECT LEVEL lvl, object_id
FROM SYS.public_dependency s
START WITH s.object_id =
(SELECT object_id
FROM user_objects
WHERE object_name = UPPER ('&OBJECT_NAME')
AND object_type = UPPER ('&OBJECT_TYPE'))
CONNECT BY s.object_id = PRIOR referenced_object_id
GROUP BY LEVEL, object_id) tree
, user_objects u
WHERE tree.object_id = u.object_id
ORDER BY lvl
/
Je suis d'accord avec EddieAwad.
Il est important de souligner qu'Oracle ne fait que suivre les dépendances jusqu'au niveau de l'objet. Si vous avez vos procédures stockées dans un paquet, vous pouvez seulement suivre les dépendances si le paquet, pas les différentes fonctions/procédures dans le paquet.
Si vous cherchez à suivre les dépendances intra-paquet, vous aurez besoin d'un analyseur PLSQL.
Autre chose qui mérite d'être soulignée ici, il y a certains cas où la dépendance peut seulement être à l'exécution, qui malheureusement n'apparaîtra pas dans les métadonnées.
Par exemple, si vous construisez une instruction SQL à l'exécution, vous pouvez avoir un code similaire à:
...
mysql := 'select count(*) from '||table_name_in;
execute immediate mysql;
...
J'ai été brûlé par cette opération plusieurs fois, mais il n'y a malheureusement aucun moyen de trouver ces types de dépendances à l'avance car cela dépend potentiellement de l'entrée de l'utilisateur.
Pour obtenir tous les détails:
select * from all_dependencies where owner = '&OWNER' and NAME='&OBJECT_NAME'
- 1. Procédure stockée Valeur par défaut
- 2. Procédure stockée par Linq Problème
- 3. Comment obtenir par programme des dépendances DLL
- 4. Comment supprimer les résultats d'une procédure stockée à partir d'une procédure stockée?
- 5. structure de procédure stockée
- 6. Comment puis-je renvoyer toutes les valeurs d'une procédure stockée?
- 7. Réinitialiser @@ procédure stockée FETCH_STATUS
- 8. Recherche d'une procédure stockée
- 9. Comment utiliser les résultats d'une procédure stockée dans une autre?
- 10. Sql Agréger les résultats d'une procédure stockée
- 11. Syntaxe de procédure stockée
- 12. mysql-procédure stockée:
- 13. procédure stockée retourne varchar
- 14. Erreur de procédure stockée
- 15. procédure stockée supprimer requête
- 16. Réplication MySQL Trigger & Procédure stockée
- 17. Comment encapsuler l'appel de procédure stockée
- 18. procédure stockée et Entity Framework
- 19. Comment utiliser la procédure stockée dans les jointures internes?
- 20. Appel de la procédure stockée
- 21. Comment appeler une procédure stockée depuis iReport?
- 22. comment exécuter une procédure stockée en continu?
- 23. paramètres Oracle procédure stockée OUT
- 24. Travail SQL et procédure stockée
- 25. procédure stockée CLR appelant la classe .NET par exemple
- 26. Chaîne tronquée Linq to sql renvoyée par la procédure stockée
- 27. Erreur de division par zéro dans la procédure stockée
- 28. Sybase ASA 9 Procédure stockée, utiliser le paramètre par défaut
- 29. Supprimer dans la procédure stockée
- 30. S'agit-il d'une procédure stockée?