Programování

Rychlé prohlížení omezení databáze Oracle

Když pracuji s databází Oracle, stále používám SQL * Plus pro mnoho rychlých a špinavých databázových dotazů. Zejména často vyhledávám omezení v SQL * Plus. V tomto příspěvku se podívám na zobrazení databáze Oracle a dotazy, které používám nejčastěji, abych získal představu, s jakými omezeními se potýkám.

Zjistil jsem, že dva nejdůležitější pohledy pro stanovení základních omezení databáze jsou ALL_CONSTRAINTS (USER_CONSTRAINTS) a ALL_CONS_COLUMNS (nebo USER_CONS_COLUMNS). V tomto příspěvku se podívám na některé dotazy, které rád používám a které využívají výhod těchto pohledů z Oracle Data Dictionary.

Pohled ALL_CONSTRAINTS je skvělý pro hledání základních podrobností omezení. Následující fragment kódu SQL * Plus to demonstruje při použití.

displayConstraintInfo.sql

nastavit řádkovou velikost 180 nastavit ověřit vypnout přijmout omezení constraintName "Constraint Name:" SELECT constraint_name, constraint_type, r_constraint_name, table_name, search_condition FROM all_constraints WHERE constraint_name = '& constraintName'; 

Výše uvedený úryvek vyzve k zadání názvu omezení a poté poskytne některé základní charakteristiky tohoto omezení poskytovaného ALL_CONSTRAINTS Pohled. Jednou z těchto charakteristik je CONSTRAINT_TYPE, což je jedna z následujících hodnot: 'C' (Check Constraint), 'P' (Primary Key), 'R' (Reference / Foreign Key), 'U' (Unique), 'V' (with check option on pohled), „O“ (pouze pro čtení v pohledu). Výše uvedený dotaz vyžaduje, aby člověk znal název omezení. Následující dotaz zobrazí podobné informace o omezeních pro danou tabulku.

displayConstraintsOnTable.sql

nastavit řádkovou velikost 180 nastavit ověřit vypnout přijmout výzvu TableName "Název tabulky:" SELECT constraint_name, constraint_type, r_constraint_name, table_name, search_condition FROM all_constraints WHERE table_name = '& tableName'; 

Výše uvedený dotaz poskytuje omezení pro danou tabulku, ale je často užitečné vědět, které sloupce konkrétně v tabulce mají omezení. To lze snadno provést připojením zobrazení ALL_CONS_COLUMNS k zobrazení ALL_CONSTRAINTS.

displayConstraintsOnTableColumns.sql

nastavit řádkovou velikost 180 nastavit ověřit vypnout přijmout výzvu TableName "Název tabulky:" 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; 

Dalším užitečným dotazem používajícím tyto dva pohledy související s omezeními je ten, který poskytuje informace o omezeních referenční integrity (CONSTRAINT_TYPE z R). Zejména tento jednoduchý dotaz ukazuje omezení pro danou tabulku, která jsou omezeními cizího klíče a na kterých omezeních primárního klíče závisí.

displayForeignKeyConstraints.sql

nastavit velikost řádků 180 nastavit ověřit vypnout přijmout výzvu TableName "Název tabulky:" 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; 

V tomto příspěvku jsem shrnul některé užitečné dotazy, které lze sestavit z pohledu Oracle Data Dictionary ALL_CONSTRAINTS a ALL_USER_CONS_COLUMNS.

Původní příspěvky jsou k dispozici na //marxsoftware.blogspot.com/ (inspirováno skutečnými událostmi)

Tento příběh s názvem „Rychlé prohlížení omezení databáze Oracle“ původně publikoval server JavaWorld.