Oracle menemukan kendala

166

Saya memiliki batasan yang disebut users.SYS_C00381400. Bagaimana cara menemukan batasan itu? Apakah ada cara untuk menanyakan semua kendala?

David Oneill
sumber
bagaimana cara mengetahui kendala? users.SYS_C00381400
Vinay
Nama kendala muncul di pesan kesalahan.
David Oneill

Jawaban:

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

Seperti semua tampilan kamus data, ini tampilan USER_CONSTRAINTS jika Anda hanya ingin memeriksa skema Anda saat ini dan tampilan DBA_CONSTRAINTS untuk pengguna administrasi.

Konstruksi nama kendala menunjukkan sistem yang dihasilkan nama kendala. Misalnya, jika kita menentukan TIDAK NULL dalam deklarasi tabel. Atau memang kunci utama atau unik. Sebagai contoh:

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'untuk cek, 'P'untuk utama.

Secara umum itu adalah ide yang baik untuk memberikan batasan eksplisit nama relasional. Misalnya, jika database membuat indeks untuk kunci utama (yang akan dilakukan jika kolom itu belum diindeks) itu akan menggunakan nama kendala atau nama indeks. Anda tidak ingin database penuh dengan indeks bernama like SYS_C00935191.

Sejujurnya kebanyakan orang tidak repot menyebutkan batasan NOT NULL.

APC
sumber
25

Untuk mendapatkan deskripsi yang lebih terperinci (tabel / kolom mana yang merujuk tabel / kolom mana) Anda bisa menjalankan kueri berikut:

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;

Dari sini .

Thiago
sumber
6

mungkin ini bisa membantu ..

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