Προγραμματισμός

Γρήγορη προβολή περιορισμών βάσης δεδομένων Oracle

Όταν δουλεύω με μια βάση δεδομένων της Oracle, εξακολουθώ να χρησιμοποιώ τον SQL * Plus για πολλά γρήγορα και βρώμικα ερωτήματα βάσης δεδομένων. Συγκεκριμένα, αναζητώ συχνά περιορισμούς στο SQL * Plus. Σε αυτήν την ανάρτηση, εξετάζω τις προβολές και τα ερωτήματα της βάσης δεδομένων της Oracle που χρησιμοποιώ περισσότερο για να πάρω μια ιδέα για τους περιορισμούς που αντιμετωπίζω.

Βρήκα τις δύο πιο σημαντικές προβολές για τον καθορισμό βασικών περιορισμών βάσης δεδομένων είναι ALL_CONSTRAINTS (USER_CONSTRAINTS) και ALL_CONS_COLUMNS (ή USER_CONS_COLUMNS). Σε αυτήν την ανάρτηση, εξετάζω ορισμένα ερωτήματα που θέλω να χρησιμοποιήσω που εκμεταλλεύονται αυτές τις προβολές από το Oracle Data Dictionary.

Η προβολή ALL_CONSTRAINTS είναι ιδανική για την εύρεση βασικών λεπτομερειών περιορισμού. Το επόμενο απόσπασμα SQL * Plus το αποδεικνύει σε χρήση.

displayConstraintInfo.sql

set linesize 180 set verify off accept constraintName prompt "Όνομα περιορισμού:" SELECT constraint_name, constraint_type, r_constraint_name, table_name, search_condition FROM all_constraints WHERE constraint_name = '& constraintName'; 

Το παραπάνω απόσπασμα θα ζητήσει ένα όνομα περιορισμού και στη συνέχεια θα παράσχει ορισμένα θεμελιώδη χαρακτηριστικά αυτού του περιορισμού που παρέχεται από το ALL_CONSTRAINTS θέα. Ένα από αυτά τα χαρακτηριστικά είναι CONSTRAINT_TYPE, η οποία είναι μία από τις ακόλουθες τιμές: 'C' (Έλεγχος περιορισμού), 'P' (Κύριο κλειδί), 'R' (Κλειδί αναφοράς / Ξένο), 'U' (Μοναδικό), 'V' (με επιλογή επιλογής ενεργοποιημένη) μια προβολή), «O» (με μόνο ανάγνωση σε προβολή). Το παραπάνω ερώτημα απαιτεί από κάποιον να γνωρίζει το όνομα περιορισμού. Το επόμενο ερώτημα θα εμφανίσει παρόμοιες πληροφορίες για περιορισμούς σε έναν δεδομένο πίνακα.

displayConstraintsOnTable.sql

set linesize 180 set verify off accept tableName prompt "Όνομα πίνακα:" SELECT constraint_name, constraint_type, r_constraint_name, table_name, search_condition FROM all_constraints WHERE table_name = '& tableName'; 

Το παραπάνω ερώτημα παρέχει τους περιορισμούς σε έναν δεδομένο πίνακα, αλλά είναι συχνά χρήσιμο να γνωρίζετε ποιες στήλες ειδικότερα στον πίνακα έχουν περιορισμούς. Αυτό γίνεται εύκολα συνδέοντας την προβολή ALL_CONS_COLUMNS στην προβολή ALL_CONSTRAINTS.

displayConstraintsOnTableColumns.sql

set linesize 180 set verify off accept tableName prompt "Όνομα πίνακα:" SELECT c.constraint_name, c.constraint_type, c.r_constraint_name, c.table_name, cc.column_name, cc.position, c.search_condition FROM all_constraints c, all_cons_columns cc WHER .table_name = '& tableName' ΚΑΙ c.constraint_name = cc.constraint_name; 

Ένα άλλο χρήσιμο ερώτημα που χρησιμοποιεί αυτές τις δύο προβολές που σχετίζονται με περιορισμούς είναι αυτό που παρέχει πληροφορίες σχετικά με τους περιορισμούς ακεραιότητας αναφοράς (CONSTRAINT_TYPE του Ρ). Συγκεκριμένα, αυτό το απλό ερώτημα δείχνει τους περιορισμούς για έναν δεδομένο πίνακα που είναι περιορισμοί ξένου κλειδιού και από τους οποίους βασίζονται οι περιορισμοί πρωτεύοντος κλειδιού.

displayForeignKeyConstraints.sql

set linesize 180 set verification off accept tableName prompt "Όνομα πίνακα:" SELECT cf.constraint_name "FOREIGN KEY", cp.constraint_name "DEPENDS ON", cp.table_name, ccp.column_name, ccp.position FROM all_constraints cp, all_cons_columns cf ΠΟΥ ΕΙΝΑΙ cp.table_name = '& tableName' ΚΑΙ cp.constraint_name = ccp.constraint_name ΚΑΙ cf.r_constraint_name = cp.constraint_name ΚΑΙ cf.r_constraint_name = ccp.constraint_name; 

Σε αυτήν την ανάρτηση συνοψίζω μερικά από τα χρήσιμα ερωτήματα που μπορεί να δημιουργήσει κανείς από τις προβολές του Oracle Data Dictionary ALL_CONSTRAINTS και ALL_USER_CONS_COLUMNS.

Η αρχική ανάρτηση διατίθεται στη διεύθυνση //marxsoftware.blogspot.com/ (Εμπνευσμένη από τις πραγματικές εκδηλώσεις)

Αυτή η ιστορία, "Quickly Viewing Oracle Database Constraints" δημοσιεύθηκε αρχικά από την JavaWorld.