Visualizzazione rapida dei vincoli del database Oracle

Quando lavoro con un database Oracle, continuo a utilizzare SQL * Plus per molte query di database veloci e sporche. In particolare, cerco spesso i vincoli in SQL * Plus. In questo post, guardo le visualizzazioni e le query del database Oracle che utilizzo di più per avere un'idea di quali vincoli ho a che fare.

Ho scoperto che le due viste più importanti per determinare i vincoli di base del database sono ALL_CONSTRAINTS (USER_CONSTRAINTS) e ALL_CONS_COLUMNS (o USER_CONS_COLUMNS). In questo post, guardo alcune query che mi piace usare che sfruttano queste viste dall'Oracle Data Dictionary.

La vista ALL_CONSTRAINTS è ottima per trovare i dettagli dei vincoli di base. Il successivo frammento di SQL * Plus lo dimostra in uso.

displayConstraintInfo.sql

set linesize 180 set verify off accept constraintName prompt "Constraint Name: " SELECT constraint_name, constraint_type, r_constraint_name, table_name, search_condition FROM all_constraints WHERE constraint_name = '&constraintName'; 

Il frammento di codice precedente richiederà un nome di vincolo e quindi fornirà alcune caratteristiche fondamentali di quel vincolo fornito dalla ALL_CONSTRAINTSvista. Una di queste caratteristiche è CONSTRAINT_TYPE, che è uno dei seguenti valori: "C" (Check Constraint), "P" (Primary Key), "R" (Referential / Foreign Key), "U" (Unique), "V" (con opzione di spunta su una vista), 'O' (con sola lettura su una vista). La query precedente richiede che si conosca il nome del vincolo. La query successiva mostrerà informazioni simili per i vincoli su una determinata tabella.

displayConstraintsOnTable.sql

set linesize 180 set verify off accept tableName prompt "Table Name: " SELECT constraint_name, constraint_type, r_constraint_name, table_name, search_condition FROM all_constraints WHERE table_name = '&tableName'; 

La query precedente fornisce i vincoli su una data tabella, ma spesso è utile sapere quali colonne in particolare sulla tabella hanno vincoli. Questo può essere fatto facilmente unendo la vista ALL_CONS_COLUMNS alla vista ALL_CONSTRAINTS.

displayConstraintsOnTableColumns.sql

set linesize 180 set verify off accept tableName prompt "Table Name: " 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 WHERE c.table_name = '&tableName' AND c.constraint_name = cc.constraint_name; 

Un'altra query utile che utilizza queste due viste correlate ai vincoli è quella che fornisce informazioni sui vincoli di integrità referenziale ( CONSTRAINT_TYPEof R). In particolare, questa semplice query mostra i vincoli per una data tabella che sono vincoli di chiave esterna e da quali vincoli di chiave primaria dipendono.

displayForeignKeyConstraints.sql

set linesize 180 set verify off accept tableName prompt "Table Name: " 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 ccp, all_constraints cf WHERE cp.table_name = '&tableName' AND cp.constraint_name = ccp.constraint_name AND cf.r_constraint_name = cp.constraint_name AND cf.r_constraint_name = ccp.constraint_name; 

In questo post ho riassunto alcune delle query utili che si possono costruire dalle viste Oracle Data Dictionary ALL_CONSTRAINTSe ALL_USER_CONS_COLUMNS.

Pubblicazione originale disponibile su //marxsoftware.blogspot.com/ (Ispirato da eventi effettivi)

Questa storia, "Visualizzazione rapida dei vincoli del database Oracle" è stata originariamente pubblicata da JavaWorld.