Какой вид 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
ИНДЕКС, ПАКЕТ, ТЕЛО ПАКЕТА, ПРОЦЕДУРА, ПОСЛЕДОВАТЕЛЬНОСТЬ, ТАБЛИЦА, ТРИГГЕР, ПРОСМОТР, потому что выберите отдельный тип_объекта из user_objects; вернул их. Так что этот запрос не дает моих ограничений вообще.
Есть ли способ получить все ограничения от Oracle? Какой вид Oracle следует использовать?
2 ответа
Ограничения не являются объектами. Таким образом, они по-другому, а именно 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
,