Oracle tìm thấy một ràng buộc


166

Tôi có một ràng buộc được gọi users.SYS_C00381400. Làm thế nào để tôi tìm thấy những hạn chế đó là gì? Có cách nào để truy vấn tất cả các ràng buộc?


Làm thế nào để biết ràng buộc? người dùng.SYS_C00381400
Vinay

Tên ràng buộc xuất hiện trong một thông báo lỗi.
David Oneill

Câu trả lời:


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

Giống như tất cả các chế độ xem từ điển dữ liệu, đây là chế độ xem USER_CONSTRAINTS nếu bạn chỉ muốn kiểm tra lược đồ hiện tại của mình và chế độ xem DBA_CONSTRAINTS cho người dùng quản trị.

Cấu trúc của tên ràng buộc cho biết tên ràng buộc do hệ thống tạo ra. Chẳng hạn, nếu chúng ta chỉ định KHÔNG NULL trong khai báo bảng. Hoặc thực sự là một khóa chính hoặc duy nhất. Ví dụ:

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'để kiểm tra, 'P'cho chính.

Nói chung, đó là một ý tưởng tốt để cung cấp cho các ràng buộc quan hệ một tên rõ ràng. Ví dụ, nếu cơ sở dữ liệu tạo một chỉ mục cho khóa chính (nó sẽ làm nếu cột đó chưa được lập chỉ mục), nó sẽ sử dụng tên ràng buộc oo đặt tên cho chỉ mục. Bạn không muốn một cơ sở dữ liệu đầy đủ các chỉ mục được đặt tên như SYS_C00935191.

Thành thật mà nói, hầu hết mọi người không bận tâm đến việc đặt tên KHÔNG ràng buộc NULL.


25

Để có được một mô tả chi tiết hơn (bảng / cột nào tham chiếu bảng / cột nào), bạn có thể chạy truy vấn sau:

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;

Từ đây .


6

có lẽ điều này có thể giúp ..

SELECT constraint_name, constraint_type, column_name
from user_constraints natural join user_cons_columns
where table_name = "my_table_name";
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.