2

次のように user_objects テーブルから CONSTRAINTS を取得しようとしています。

 select CASE object_type
      WHEN 'DATABASE LINK' then 'dblinks'
      WHEN 'FUNCTION' then 'functions'
      WHEN 'INDEX' then 'indexes'
      WHEN 'PACKAGE' then 'packages'
      WHEN 'PROCEDURE' then 'procedures'
      WHEN 'SEQUENCE' then 'sequences'
      WHEN 'TABLE' then 'tables'
      WHEN 'TRIGGER' then 'triggers'
      WHEN 'VIEW' then 'views'
      WHEN 'SYNONYM' then 'synonyms'
      WHEN 'GRANT' then 'grants'
      WHEN 'CONSTRAINT' then 'constraints'
      ELSE object_type
      END||'|'||
      CASE object_type
      WHEN 'DATABASE LINK' then 'DB_LINK'
      ELSE object_type
      END||'|'||object_name
from user_objects
where object_name not like 'BIN$%'
and object_type not like '%PARTITION'
and object_type not in ('PACKAGE BODY')
order by object_type
; 

select distinct object_type
from user_objects
; 

しかし..... USER_OBJECTS には、これらのタイプ FUNCTION
INDEX、PACKAGE、PACKAGE BODY、PROCEDURE、SEQUENCE、TABLE、TRIGGER、VIEW しかありません。それらを返しました。したがって、このクエリは私の制約をまったく与えていません。

Oracle からすべての制約を取得する方法はありますか? どの Oracle ビューを使用すればよいですか?

4

2 に答える 2

5
   select * from user_constraints
于 2010-09-24T10:34:06.920 に答える
3

制約はオブジェクトではありません。したがって、それらは異なるビュー、つまりUSER_CONSTRAINTS. 外部制約の場合、自己結合が必要になります。

select * from user_constraints c
left join user_constraints r on r.owner = c.r_owner and r.constraint_name = c.r_constraint_name
where c.constraint_type = 'R';

一部の詳細は、 にも記載されていUSER_CONS_COLUMNSます。

于 2010-09-24T10:40:04.220 に答える