2010-01-19 4 views
127

У меня есть ограничение, называемое users.SYS_C00381400. Как узнать, что это за ограничение? Есть ли способ запросить все ограничения?Oracle найти ограничение

+0

как знать ограничение? users.SYS_C00381400 – Vinay

+0

Имя ограничения появилось в сообщении об ошибке. –

ответ

195
select * from all_constraints 
where owner = '<NAME>' 
and constraint_name = 'SYS_C00381400' 
/

Как и все словаря данных, это USER_CONSTRAINTS посмотреть, если вы просто хотите, чтобы проверить текущую схему и вид DBA_CONSTRAINTS для пользователей администрирования.

Конструкция имени ограничения указывает системное сгенерированное имя ограничения. Например, если мы укажем NOT NULL в объявлении таблицы. Или действительно основной или уникальный ключ. Например:

SQL> create table t23 (id number not null primary key) 
    2/

Table created. 

SQL> select constraint_name, constraint_type 
    2 from user_constraints 
    3 where table_name = 'T23' 
    4/

CONSTRAINT_NAME    C 
------------------------------ - 
SYS_C00935190     C 
SYS_C00935191     P 

SQL> 

'C' для проверки, 'P' для первичного.

Вообще, это хорошая идея, чтобы дать реляционным ограничениям явное имя. Например, если база данных создает индекс для первичного ключа (который он будет делать, если этот столбец еще не проиндексирован), он будет использовать имя ограничения o имя индекса. Вы не хотите, чтобы база данных была заполнена такими индексами, как SYS_C00935191.

Большинство людей не удосуживаются назвать NULL ограничениями.

19

Чтобы получить более подробное описание (что ссылки таблицы/столбцов которой таблица/столбец), можно выполнить следующий запрос:

SELECT uc.constraint_name||CHR(10) 
    ||  '('||ucc1.TABLE_NAME||'.'||ucc1.column_name||')' constraint_source 
    ,  'REFERENCES'||CHR(10) 
    ||  '('||ucc2.TABLE_NAME||'.'||ucc2.column_name||')' references_column 
FROM user_constraints uc , 
    user_cons_columns ucc1 , 
    user_cons_columns ucc2 
WHERE uc.constraint_name = ucc1.constraint_name 
AND uc.r_constraint_name = ucc2.constraint_name 
AND ucc1.POSITION  = ucc2.POSITION -- Correction for multiple column primary keys. 
AND uc.constraint_type = 'R' 
AND uc.constraint_name = 'SYS_C00381400' 
ORDER BY ucc1.TABLE_NAME , 
    uc.constraint_name; 

От here.

4

может быть, это может помочь ..

SELECT constraint_name, constraint_type, column_name 
from user_constraints natural join user_cons_columns 
where table_name = "my_table_name"; 
Смежные вопросы