Tôi đang nhận được "ORA-01779: không thể sửa đổi một cột ánh xạ tới bảng không được bảo tồn khóa" khi tôi cố cập nhật liên kết. Tôi đã tìm kiếm trên trang web và tìm thấy rất nhiều lời khuyên về ý nghĩa của việc bảo quản khóa và tại sao cần thiết ... nhưng gần như tôi có thể nói rằng tôi đang tuân thủ lời khuyên đó và vẫn nhận được lỗi.
Tôi có hai bảng:
PG_LABLOCATION has, among other things, the columns:
"LABLOCID" NUMBER,
"DNSNAME" VARCHAR2(200 BYTE)
LABLOCID is the primary key, DNSNAME has a unique constraint
PG_MACHINE has, among other things, the columns:
"MACHINEID" NUMBER,
"LABLOCID" NUMBER,
"IN_USE" NUMBER(1,0) DEFAULT 0,
"UPDATE_TIME" TIMESTAMP (6) DEFAULT '01-JAN-1970'
MACHINEID is a primary key
LABLOCID is a foreign key into LABLOCID in PG_LABLOCATION (its primary key)
Bản cập nhật tôi đang chạy là:
update
(select mac.in_use, mac.update_time
from pg_machine mac
inner join pg_lablocation loc
on mac.lablocid = loc.lablocid
where loc.dnsname = 'value'
and '02-JAN-2013' > mac.update_time
)
set in_use = 1 - MOD( 101, 2 ), update_time = '02-JAN-2013';
Tôi chỉ cập nhật các giá trị trong một bảng (PG_MACHINE) và cột tham gia trong bảng khác là khóa chính, điều này sẽ làm cho khóa được bảo toàn bằng cách đọc của tôi. Tôi lo ngại rằng mệnh đề where gây ra sự cố, nhưng tôi đã thử xóa bộ lọc trên mac.update_time và gặp cùng một lỗi và loc.dnsname có một ràng buộc duy nhất.
Điều thậm chí kỳ quặc là chúng ta có, giống như nhiều người, một nhà phát triển và môi trường prod. Chúng tôi đã thực hiện một lược đồ hoàn chỉnh và di chuyển dữ liệu từ prod sang dev. Tôi đã xem cả hai và họ có các chỉ số và ràng buộc giống hệt nhau. Truy vấn hoạt động trong dev, nhưng tạo ra lỗi trên trong prod.
Vì vậy, hai câu hỏi:
1) Bạn có thể thấy những gì sai với truy vấn của tôi? 2) Bạn có thể đề xuất những gì có thể khác nhau giữa môi trường dev và prod của tôi (ví dụ: cài đặt máy chủ) có thể gây ra lỗi này ở một nhưng không phải lỗi khác không?