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?
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?
Câu trả lời:
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.
Để 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 .