Oracleデータベースの制約をすばやく表示する

Oracleデータベースを使用しているときでも、SQL * Plusを使用して多くの迅速でダーティなデータベースクエリを実行しています。特に、SQL * Plusで制約を調べることがよくあります。この投稿では、私が扱っている制約を理解するために最もよく使用するOracleデータベースのビューとクエリを確認します。

基本的なデータベース制約を決定するための2つの最も重要なビューは、ALL_CONSTRAINTS(USER_CONSTRAINTS)とALL_CONS_COLUMNS(またはUSER_CONS_COLUMNS)であることがわかりました。この投稿では、Oracleデータディクショナリのこれらのビューを利用する、使用したいクエリをいくつか見ていきます。

ALL_CONSTRAINTSビューは、基本的な制約の詳細を見つけるのに最適です。次のSQL * Plusスニペットは、これが使用されていることを示しています。

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

上記のスニペットは、制約名の入力を求め、ALL_CONSTRAINTSビューによって提供されるその制約のいくつかの基本的な特性を提供します。これらの特性のCONSTRAINT_TYPE1つは、次のいずれかの値です: 'C'(チェック制約)、 'P'(主キー)、 'R'(参照/外部キー)、 'U'(一意)、 'V' (ビューのチェックオプション付き)、 'O'(ビューの読み取り専用)。上記のクエリでは、制約名を知っている必要があります。次のクエリは、特定のテーブルの制約に関する同様の情報を表示します。

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

上記のクエリは特定のテーブルに制約を提供しますが、特にテーブルのどの列に制約があるかを知ることはしばしば役に立ちます。これは、ALL_CONS_COLUMNSビューを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; 

これらの2つの制約関連ビューを使用する別の便利なクエリは、参照整合性制約(CONSTRAINT_TYPER)に関する情報を提供するクエリです。特に、この単純なクエリは、外部キー制約である特定のテーブルの制約と、それらが依存する主キー制約を示します。

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; 

この投稿では、OracleデータディクショナリビューALL_CONSTRAINTSとから構築できる便利なクエリのいくつかを要約しましたALL_USER_CONS_COLUMNS

//marxsoftware.blogspot.com/で利用可能な元の投稿(実際のイベントに触発された)

このストーリー「Oracleデータベースの制約をすばやく表示する」は、もともとJavaWorldによって公開されました。