Oracle находит ограничение

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

Ответ 1

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.

Большинство людей не беспокоятся об именах NOT NULL ограничений.

Ответ 2

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

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;

Из здесь.

Ответ 3

возможно, это может помочь.

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";