7
votes

Quelle table Oracle utilise une séquence?

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?

Quelqu'un sait un moyen de découvrir cette relation de table de séquence?


1 commentaires

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.


5 Réponses :


2
votes

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.

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.


1 commentaires

Si la procédure stockée sp_something références séquence SEQ_Something , alors sp_something apparaîtra sûrement dans SEQ_QUIGHATHATHIAT "SE" Référencé par "Liste ?



1
votes

Utilisez Grep pour analyser toute votre source pour "mysq.Nextval" - myseq étant celui que vous recherchez ....


3 commentaires

Cela a été mon approche. grep -prine "myseq \." . 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 . Si vous êtes en 10g, utilisez fonction de la fonction à la recherche.


@Guru c'est 9i. Mais de toute façon, il est bon de savoir sur Regex_Like . Merci.



2
votes

Dans la base de données Vous pouvez rechercher tout le code stocké de votre schéma, comme celui-ci: XXX

dans SQL Developer, il y a un rapport pour le faire.


2 commentaires

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!



8
votes

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 à: xxx

si vous utilisez pl / sql, vous pouvez écrire quelque chose de similaire pour type Dans ("corps de paquet", "procédure", "fonction") , 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.


1 commentaires

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";



0
votes

J'aimerais ajouter fond informations sur Séquences.


0 commentaires