2016-07-03 8 views
0

OracleおよびPostgreSQLでテーブルレベルのチェック制約を取得する特定の方法があるかどうかを知りたいと思います。OracleおよびPostgreSQLでテーブルレベルのチェック制約を取得する方法

テーブル内のすべてのチェック制約を取得できますが、この特定のチェック制約のみを取得したいので、特定のクエリがあるかどうかわかりません。

ありがとうございます!

答えて

0

PostgreSQLには、システムカタログpg_constraintがあります。

カタログpg_constraint店は、主キー、ユニーク、外国 キー、およびテーブル上の排他制約を確認してください。 (列の制約は特別に扱われる ではありません。すべての列制約はいくつかのテーブル 制約に相当します)。nullでない制約は、カタログのpg_attribute に表示されます。

(CREATE CONSTRAINT トリガーで作成された)ユーザー定義の制約トリガーもこのテーブルにエントリを生成します。

ドメインのチェック制約もここに保存されます。

SELECT 
    * 
FROM 
    pg_constraint 
WHERE 
    contype = 'c' AND -- check constraint 
    conrelid != 0 AND -- table constraint 
    conname = 'my_check'; 

contype列が制約タイプが含まれている、cはチェック制約のためです。 conrelid列には、この制約が適用されているテーブルのoidと、テーブル制約でない場合は0が含まれています。 Oracleの基本的なビューのために

+0

感謝そんなに、私は唯一の制約]タブ - を確認するために、特定のクエリを探していますレベル、私はそれが存在するかわからない。このクエリでは、タブレベルのチェック制約だけでなく、すべての制約を取得します。 – WhiteShadow

+0

OK、テーブルチェック制約のみを選択して回答を更新しました。 「特定のチェック制約」が意味することを説明してください。不足している小切手を見つけたいですか? – Adam

+0

私は良い説明しているかどうか分かりません。私は、コミコンの名前がわからないテーブルレベルのチェック制約が必要です。例:BONUSとTAXという2つの変数を持つテーブルEMPがあり、BONUS> TAXのテーブルレベルのチェック制約があります。私はこの制約が欲しいだけですが、pg_constraintを調べると、それがテーブルレベルのチェック制約かカラムレベルのチェック制約かどうかを問うことはできません。私はそれを非常に良い、申し訳ありません説明したかどうかわからない! – WhiteShadow

0

は、特定のテーブル内の特定の制約得るために、ALL_CONSTRAINTS

クエリです:あなたの答えのための

SELECT * 
    FROM all_constraints 
WHERE constraint_name LIKE upper('%&your_costraint%') 
    AND table_name LIKE upper('%&your_table%'); 
+0

ありがとう、私は制約名を知らずにチェック制約tab_levelのための特定のクエリを探しています。あなたの方法では、私はテーブルのすべての制約を取得します。 – WhiteShadow

+0

カラム** constraint_type **を使用してチェック制約のみを検索します: 'SELECT * FROM all_constraints WHERE table_name LIKE upper( '%&your_table%')AND constraint_type = 'C';' –

関連する問題