Avoir une séquence, j'ai besoin de savoir quelle table.Column obtient ses valeurs. Pour autant que je sache, Oracle ne reste pas une trace de cette relation. Ainsi, la recherche de la séquence du code source serait la seule façon. Est-ce correct? P>
Quelqu'un sait un moyen de découvrir cette relation de table de séquence? P>
5 Réponses :
Si votre séquence est utilisée dans un déclencheur, la gâchette sera répertoriée dans la liste "référencée par" de la séquence. p>
Si votre séquence n'est utilisée que dans les requêtes de code source, que oui, la navigation sur le code est la seule façon. P>
Si la procédure stockée sp_something code> références séquence
SEQ_Something code>, alors
sp_something code> apparaîtra sûrement dans
SEQ_QUIGHATHATHIAT "SE" Référencé par "Liste ?
Utilisez Grep pour analyser toute votre source pour "mysq.Nextval" - myseq étant celui que vous recherchez .... p>
Cela a été mon approche. grep -prine "myseq \." . code> sur la base de code complète. Le problème est que les gens n'ont pas tout le code sous contrôle de version. Je pense que beaucoup de code (procédures) ne sont stockés que sur la base de données.
Si vous ne pouvez référer que le code stocké dans dB, essayez all_source code>. Si vous êtes en 10g, utilisez
fonction de la fonction code> à la recherche.
@Guru c'est 9i. Mais de toute façon, il est bon de savoir sur Regex_Like code>. Merci.
Dans la base de données Vous pouvez rechercher tout le code stocké de votre schéma, comme celui-ci: dans SQL Developer, il y a un rapport pour le faire. P> P>
Cela ne s'occupera pas des cas comme "Sélectionnez Myseq. Nextval de Dual;"
Vrai, et c'est toujours un problème avec les recherches de texte. Vous pouvez utiliser '% mysq%.% Nextval%', mais cela pourrait produire de faux positifs pour quelque chose comme «mysq2.nextval». Aucune réponse facile pour ça!
Le problème est que Oracle nous permet d'utiliser une séquence pour peupler des colonnes dans plusieurs tables. Les scénarios où cela pourrait être souhaitable inclure des implémentations super-type / sous-type.
Vous pouvez utiliser les dépendances du dictionnaire de données pour identifier les relations. Par exemple, si vous utilisez des déclencheurs pour affecter les valeurs, cette requête vous aidera à: P> si vous utilisez pl / sql, vous pouvez écrire quelque chose de similaire pour type Dans ("corps de paquet", "procédure", "fonction") code>, bien que vous n'auriez toujours pas besoin de chalutage dans le code source pour affecter des tables et des séquences lorsque vous avez plusieurs hits. P> P>
Si vous avez la Séquence_Name et que vous souhaitez vérifier pour quelles tables utilisées via des déclencheurs, vous pouvez utiliser une requête supérieure à une autre requête avec une autre "et" Spécification du nom de la séquence: Sélectionnez UT.table_Name, UD.Retable_Name comme Séquence_Name à partir de User_DePendances UD Joindre User_Triggers u sur (ut.trigger_name = ud.name) où ud.type = "déclencheur" et ud.referended_type = "séquence" et ud.reférended_name = "Your_seq_name";
Oracle ne le suit pas car il n'y a pas de relation de ce type, à l'exception de la convention. C'est pourquoi vous utilisez généralement une sorte de convention de dénomination, par ex. La table XYZ a une séquence SEQ_XYZ.