Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle - xóa tất cả các bản ghi con cho cha mẹ

Đây là khá nhiều khóa chính, khóa ngoại và các mệnh đề như ON DELETE CASCADE là cho. Nếu vẫn chưa quá muộn, bạn có thể thử thêm các ràng buộc PK và FK trước khi thực hiện bất kỳ thao tác xóa nào; thì mọi thứ sẽ dễ dàng.

ĐÃ THÊM :Dựa trên thảo luận thêm. Truy vấn dưới đây có thể được sử dụng để tìm tất cả các bảng con của bảng mẹ. Truy vấn có thể được cải thiện theo nhiều cách, nhưng nó có thể là một điểm khởi đầu OK.

with f as (
        select constraint_name, table_name, r_constraint_name
        from   user_constraints
        where  constraint_type = 'R'
     ),
     p as (
        select constraint_name, table_name
        from   user_constraints
        where  constraint_type = 'P'
     ),
     j (child_table, f_key, parent_table, p_key) as (
        select f.table_name, f.constraint_name, p.table_name, f.r_constraint_name
        from   p join f on p.constraint_name = f.r_constraint_name
        union all
        select 'EMPLOYEES', (select constraint_name from p 
                                where table_name = 'EMPLOYEES'), null, null from dual
     )
select level as lvl, j.*
from j
start with parent_table is null
connect by nocycle parent_table = prior child_table
order by lvl, parent_table, child_table;

Bảng "cha" trong trường hợp này là NHÂN VIÊN và tên xuất hiện hai lần, trên cùng một dòng. Điều đó có thể được tạo thành một biến ràng buộc nếu cần. Tôi đã sử dụng NHÂN VIÊN (lưu ý:nó phải được viết hoa toàn bộ vì đó là cách các giá trị chuỗi được lưu trữ trong bảng hệ thống) vì tôi đã chạy điều này trên giản đồ HR chuẩn; đầu ra:

  LVL CHILD_TABLE       F_KEY                PARENT_TABLE      P_KEY
----- ----------------- -------------------- ----------------- -----------------
    1 EMPLOYEES         EMP_EMP_ID_PK
    2 DEPARTMENTS       DEPT_MGR_FK          EMPLOYEES         EMP_EMP_ID_PK
    2 JOB_HISTORY       JHIST_EMP_FK         EMPLOYEES         EMP_EMP_ID_PK
    3 JOB_HISTORY       JHIST_DEPT_FK        DEPARTMENTS       DEPT_ID_PK


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. CLEAR SCREEN - Phím tắt Oracle SQL Developer?

  2. Lỗi đăng nhập Sqlplus khi sử dụng các biến bash:SP2-0306:Tùy chọn không hợp lệ

  3. Oracle:DBMS_UTILITY.EXEC_DDL_STATEMENT so với EXECUTE NGAY LẬP TỨC

  4. Cách tốt nhất để xác định phiên bản ứng dụng khách Oracle mà tôi đang chạy là gì?

  5. Thủ tục kiểm tra các hàng không trùng lặp trong bảng trước khi chèn (Oracle)