2010-01-19 7 views
127

Tôi có một ràng buộc gọi là users.SYS_C00381400. Làm cách nào để tìm ra ràng buộc đó là gì? Có cách nào để truy vấn tất cả các ràng buộc?Oracle tìm một ràng buộc

+0

thế nào để biết hạn chế? users.SYS_C00381400 – Vinay

+0

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

Trả lời

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

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

Việc xây dựng tên ràng buộc cho biết tên ràng buộc do hệ thống tạo ra. Ví dụ, nếu chúng ta chỉ định NOT NULL trong một 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, tốt hơn là nên 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 (mà 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 o tên chỉ mục. Bạn không muốn một cơ sở dữ liệu có đầy đủ các chỉ mục có tên là SYS_C00935191.

Hầu hết mọi người không bận tâm đến việc đặt tên cho ràng buộc NOT NULL.

19

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

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ừ here.

4

có lẽ đâ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";