Oracle bir kısıtlama bulur


166

Adlı bir kısıtlamam var users.SYS_C00381400. Bu kısıtlamanın ne olduğunu nasıl bulabilirim? Tüm kısıtlamaları sorgulamanın bir yolu var mı?


kısıtlama nasıl bilinir? Kullanıcılar.SYS_C00381400
Vinay

Kısıtlama adı bir hata iletisinde göründü.
David Oneill

Yanıtlar:


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

Tüm veri sözlüğü görünümlerinde olduğu gibi, geçerli şemanızı ve yönetim kullanıcıları için bir DBA_CONSTRAINTS görünümünü kontrol etmek istiyorsanız bu bir USER_CONSTRAINTS görünümdür.

Kısıtlama adının yapısı, sistem tarafından oluşturulan bir kısıtlama adını belirtir. Örneğin, bir tablo bildiriminde NOT NULL belirtirsek. Veya aslında birincil veya benzersiz bir anahtar. Örneğin:

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'kontrol 'P'için, birincil için.

Genellikle ilişkisel kısıtlamalara açık bir ad vermek iyi bir fikirdir. Örneğin, veritabanı birincil anahtar için bir dizin oluşturursa (bu sütun zaten dizine eklenmemişse yapılacaktır), dizin adı oo adı olan kısıtlama adını kullanır. Like adında dizinlerle dolu bir veritabanı istemezsiniz SYS_C00935191.

Dürüst olmak gerekirse, çoğu insan NOT NULL kısıtlamaları adlandırmak zahmet etmeyin.


25

Daha ayrıntılı bir açıklama almak için (hangi tablo / sütun hangi tablo / sütun referansları) aşağıdaki sorguyu çalıştırabilirsiniz:

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;

Gönderen burada .


6

belki bu yardımcı olabilir ..

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.