Saya memiliki batasan yang disebut users.SYS_C00381400
. Bagaimana cara menemukan batasan itu? Apakah ada cara untuk menanyakan semua kendala?
Saya memiliki batasan yang disebut users.SYS_C00381400
. Bagaimana cara menemukan batasan itu? Apakah ada cara untuk menanyakan semua kendala?
Jawaban:
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.
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 .