Какое представление Oracle содержит все ограничения вместе?

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

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


person Ronaldus    schedule 24.09.2010    source источник


Ответы (1)


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

person Codo    schedule 24.09.2010
comment
нашел решение, используя ограничения выбора объединения || '|' || c.constraint_name OBJ из user_constraints c внутреннее соединение all_constraints cc on c.r_constraint_name = cc.constraint_name порядок по OBJ/ - person Ronaldus; 24.09.2010
comment
select CASE object_type ....bladiebladiebla.... ELSE object_type END||'|'|| имя_объекта OBJ из user_objects, где ... КОГДА 'DATABASE LINK', затем 'DB_LINK' ELSE тип_объекта END||'|'||имя_объекта из user_objects, где имя_объекта не похоже на 'BIN$%' и тип_объекта не похоже на '%PARTITION', а тип_объекта не in ('КОРПУС ПАКЕТА') - person Ronaldus; 24.09.2010