CREATE TABLE A (a_id NUMBER, CONSTRAINT a_pk PRIMARY KEY (a_id));
CREATE TABLE B
(
b_id NUMBER
,a_id
,CONSTRAINT b_pk PRIMARY KEY (b_id)
,CONSTRAINT b_fk FOREIGN KEY (a_id) REFERENCES A (a_id)
);
CREATE TABLE C
(
C_id NUMBER
,b_id
,CONSTRAINT c_pk PRIMARY KEY (c_id)
,CONSTRAINT c_fk FOREIGN KEY (b_id) REFERENCES B (b_id)
);
--creating dummy data
insert into A select level from dual connect by level<11 ;
insert into B(b_id,a_id) select level+10,level from dual connect by level<11;
insert into C(c_id,b_id) select level+20,level+10 from dual connect by level<11;
CREATE OR REPLACE PROCEDURE delete_a(p_a_id IN a.id%TYPE)
IS
BEGIN
--delete record from C first
DELETE FROM C WHERE b_id IN (SELECT b_id from B where a_id =p_a_id);
--delete record from B
DELET FROM B WHERE a_id = p_a_id;
--delete from the main table
DELETE FROM C where a_id = p_a_id;
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error while delete the recods '||SQLERRM);
ROLLBACK;
END delete_a;
注意:我没有测试过代码,但会使用这种方法