В каком представлении Oracle содержатся все ограничения вместе? - PullRequest
2 голосов
/ 24 сентября 2010

Я пытаюсь получить CONSTRAINTS из таблицы user_objects следующим образом:

 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, потому что выберите отдельный тип_объекта из user_objects;вернул их.Так что этот запрос вообще не дает моих ограничений.

Есть ли способ получить все ограничения от Oracle?Какой вид Oracle следует использовать?

Ответы [ 2 ]

5 голосов
/ 24 сентября 2010
   select * from user_constraints
3 голосов
/ 24 сентября 2010

Ограничения не являются объектами. Так что они в другом представлении, а именно 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.

...