In addition to the answers already provided with several SQL statements, foreign key relationships, and triggers. In InterBase, you can also record a stored procedure to delete master and detail records. Then you need only one SQL statement in your program.
Below are two types of stored procedures that you can use in this situation.
The first one is almost the same as HeartWave's answer, but then in a stored procedure.
CREATE PROCEDURE DELETEMASTERDETAIL_WITHOUTINFO( pMasterID INTEGER) RETURNS ( rResult INTEGER) AS declare variable vTable2ID integer; begin rResult = 0; for select id from table2 where table1_id = :pMasterID into :vTable2ID do begin delete from table3 where table2_id = :vTable2ID; end delete from table2 where table1_id = :pMasterID; delete from table1 where id = :pMasterID; rResult = rResult + 1; suspend; end
The SQL statement to call this stored procedure:
select rresult from deletemasterdetail_withoutinfo(:pMasterID)
The second returns information about the number of deleted records in the table. I don’t know if you need it, but maybe it is useful for someone else. If the identifier field in table 1 is the primary key, the first for the select statement is a little redundant.
CREATE PROCEDURE DELETEMASTERDETAIL_WITHINFO( pMasterID INTEGER) RETURNS ( rTable1Deleted INTEGER, rTable2Deleted INTEGER, rTable3Deleted INTEGER) AS declare variable vTable1ID integer; declare variable vTable2ID integer; declare variable vTable3ID integer; begin rTable1Deleted = 0; rTable2Deleted = 0; rTable3Deleted = 0; for select id from table1 where id = :pMasterID into :vTable1ID do begin for select id from table2 where table1_id = :vTable1ID into :vTable2ID do begin for select id from table3 where table2_id = :vTable2ID into :vTable3ID do begin rTable3Deleted = rTable3Deleted + 1; delete from table3 where id = :vTable3ID; end rTable2Deleted = rTable2Deleted + 1; delete from table2 where id = :vTable2ID; end rTable1Deleted = rTable1Deleted + 1; delete from table1 where id = :vTable1ID; end suspend; end
The SQL statement to call this stored procedure:
select rtable1deleted, rtable2deleted, rtable3deleted from deletemasterdetail_withinfo(:pMasterID)
BTW. I almost always use at least one return parameter in SP. This will allow you to use the Query component to call the stored procedure.
If there are no result parameters, you must use the stored procedure component to execute SP.
source share