2012-12-14 26 views
18

Tôi đã có một bảng cha, trong đó có một bảng con dosen tham chiếu nó. Các bảng con này lần lượt có các bảng con khác đề cập đến chúng. Và cứ thế.Làm thế nào để buộc oracle để làm cascade xóa mà không giảm/tái chế ràng buộc

Tôi cần phải xóa một hàng khỏi bảng chính của chính nó xuống hết cỡ.

rơi/tái chế tất cả các nơi có họ "ON DELETE CASCADE" không phải là một lựa chọn

Đi qua tất cả trong số họ và xóa hàng con bằng tay là một cơn ác mộng.

Bất kỳ tùy chọn nào khác?

+0

đang kích hoạt tùy chọn hợp lệ cho bạn? – danihp

+0

@danihp, không có chúng không.Tôi không thể sửa đổi lược đồ –

+0

Bạn phải xóa bao nhiêu hàng và đây có phải là nhiệm vụ thường xuyên không? –

Trả lời

24

Đó là một trong hai ràng buộc hoặc một loạt các lần xóa riêng biệt.

Bạn có thể viết thủ tục 'xóa thông minh' điều tra cấu trúc bảng và tạo ra một loạt các căn cứ xóa trên đó, nhưng điều đó có khả năng sẽ làm việc nhiều hơn và nhiều cơn ác mộng hơn khi viết các xóa riêng biệt. Và bạn muốn để có những chòm sao này hoạt động, điều này thực tế không phải lúc nào cũng mong muốn.

Câu lệnh DELETE không có tham số nào để làm cho nó xếp tầng.

+3

Vâng, không có phép thuật. – ntalbs

0

Tôi giải quyết loại vấn đề này trong oracle với một ứng dụng tôi đã thực hiện với mục đích kết hợp dữ liệu từ một chi nhánh với một mục tiêu khác, và sau đó xóa nguồn.

https://sites.google.com/site/keytreechanger/Home https://sites.google.com/site/keytreechanger/Home/screenshots

trích dẫn

Với lỗi này, ví dụ: client Pedrus Root (nội bộ chủ chốt đại diện # R = 111) là giống như Petrus Root (# R = 222) . Di chuyển dữ liệu trong khoảng 222 đến 111, sau đó xóa 222 nhánh.
KTC tập hợp tất cả dữ liệu liên quan đến trường hợp này (và một vài trường hợp tiếp theo cần giải quyết), theo cách thông minh từ tất cả các bảng cơ sở dữ liệu có liên quan.
Thuật toán chỉ tìm kiếm khi cần và sử dụng tất cả các thành phần chính có sẵn.
Bản sao lưu tất cả dữ liệu được duy trì cục bộ cho mục đích kiểm tra. Kho lưu trữ cục bộ phát triển một cách minh bạch để thích ứng với các thay đổi trong các định nghĩa bảng/trường.

Người dùng điện kiểm tra trực quan cây bảng/quan hệ và có thể xem/in/chỉnh sửa dữ liệu trong bảng bất kỳ và tùy ý sửa đổi hành động được giả định (cắt hoặc cắt và dán hoặc hoàn thành).
Cuối cùng KTC tạo ra hàng trăm dòng chèn, cập nhật và xóa mã sửa lỗi để giải quyết trường hợp cụ thể này, được liệt kê theo thứ tự phù hợp kết thúc bằng
xóa khỏi rootTable nơi # R = 222.
Sau đó, tôi áp dụng mã với người dùng trực tuyến.

Trong trường hợp của bạn, bộ lọc sẽ phải xóa tất cả các dòng trừ các dòng xóa.

AFAIK không có ứng dụng tương đương trên thị trường.

Các vấn đề liên quan