Oracle знайде обмеження


166

У мене викликане обмеження users.SYS_C00381400. Як я можу знайти, що таке обмеження? Чи є спосіб запитати всі обмеження?


як знати обмеження? users.SYS_C00381400
Vinay,

Ім'я обмеження з'явилося у повідомленні про помилку.
Девід Онелл

Відповіді:


268
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'для первинного.

Як правило, це гарна ідея дати чіткі назви реляційним обмеженням. Наприклад, якщо база даних створює індекс для первинного ключа (що він буде робити, якщо цей стовпець уже не індексується), він буде використовувати назву обмеження oo ім'ям індексу. Ви не хочете, щоб база даних була повною з індексів, названих як SYS_C00935191.

Якщо чесно, більшість людей не турбуються називати НЕ НУЛЬНІ обмеження.


25

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

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;

Від сюди .


6

можливо, це може допомогти ..

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.