aplicados. Sei que o uso de subquery nao e uma boa pratica, mas neste caso pontual, serviu muito bem.CREATE GLOBAL TEMPORARY TABLE TB_SCRIPT_DEL_PROJETOAS-- APAGAR REGISTROS DAS TABELAS FILHAS NIVEL 4SELECT DISTINCT 'DELETE ' || TN4.TABELA_FILHA_4 || ' WHERE ' || TN4.TABELA_FILHA_4 || '.' || TN4.CAMPO_PAI_3 || ' IN (SELECT ' || TN3.TABELA_FILHA_3 || '.' || TN4.CAMPO_PAI_3 || ' FROM ' || TN3.TABELA_FILHA_3 || ' WHERE ' || TN3.TABELA_FILHA_3 || '.' || TN3.CAMPO_PAI_2 || ' IN (SELECT ' || TN2.TABELA_FILHA_2 || '.' || TN3.CAMPO_PAI_2 || ' FROM ' || TN2.TABELA_FILHA_2 || ' WHERE ' || TN2.TABELA_FILHA_2 || '.' || TN2.CAMPO_PAI_1 || ' IN (SELECT ' || TN1.TABELA_FILHA_1 || '.' || TN2.CAMPO_PAI_1 || ' FROM ' || TN1.TABELA_FILHA_1 || ' WHERE ' || TN1.TABELA_FILHA_1 || '.ID_PROJETO = NUMERO)));' AS SCRIPT, TN4.TABELA_FILHA_4 AS TABELA, 4 AS NIVELFROM TB_ADM_NIVEL_1 TN1, TB_ADM_NIVEL_2 TN2, TB_ADM_NIVEL_3 TN3, TB_ADM_NIVEL_4 TN4WHERE TN1.CAMPO_FILHA_1 = TN2.CAMPO_PAI_1AND TN2.CAMPO_FILHA_2 = TN3.CAMPO_PAI_2AND TN3.CAMPO_FILHA_3 = TN4.CAMPO_PAI_3UNION-- APAGAR REGISTROS DAS TABELAS FILHAS NIVEL 3SELECT DISTINCT 'DELETE ' || TN3.TABELA_FILHA_3 || ' WHERE ' || TN3.TABELA_FILHA_3 || '.' || TN3.CAMPO_PAI_2 || ' IN (SELECT ' || TN2.TABELA_FILHA_2 || '.' || TN3.CAMPO_PAI_2 || ' FROM ' || TN2.TABELA_FILHA_2 || ' WHERE ' || TN2.TABELA_FILHA_2 || '.' || TN2.CAMPO_PAI_1 || ' IN (SELECT ' || TN1.TABELA_FILHA_1 || '.' || TN2.CAMPO_PAI_1 || ' FROM ' || TN1.TABELA_FILHA_1 || ' WHERE ' || TN1.TABELA_FILHA_1 || '.ID_PROJETO = NUMERO));' AS SCRIPT, TN3.TABELA_FILHA_3 AS TABELA, 3 AS NIVELFROM TB_ADM_NIVEL_1 TN1, TB_ADM_NIVEL_2 TN2, TB_ADM_NIVEL_3 TN3WHERE TN1.CAMPO_FILHA_1 = TN2.CAMPO_PAI_1AND TN2.CAMPO_FILHA_2 = TN3.CAMPO_PAI_2UNION-- APAGAR REGISTROS DAS TABELAS FILHAS NIVEL 2SELECT DISTINCT 'DELETE ' || TN2.TABELA_FILHA_2 || ' WHERE ' || TN2.TABELA_FILHA_2 || '.' || TN2.CAMPO_PAI_1 || ' IN (SELECT ' || TN1.TABELA_FILHA_1 || '.' || TN2.CAMPO_PAI_1 || ' FROM ' || TN1.TABELA_FILHA_1 || ' WHERE ' || TN1.TABELA_FILHA_1 || '.ID_PROJETO = NUMERO);' AS SCRIPT, TN2.TABELA_FILHA_2 AS TABELA, 2 AS NIVELFROM TB_ADM_NIVEL_1 TN1, TB_ADM_NIVEL_2 TN2WHERE TN1.CAMPO_FILHA_1 = TN2.CAMPO_PAI_1UNION-- APAGAR REGISTROS DAS TABELAS FILHAS NIVEL 1 SEM FILHOS NIVEL 2SELECT 'DELETE ' || TABELA_FILHA_1 || ' WHERE ' || CAMPO_PAI_0 || ' = NUMERO;' AS SCRIPT, TABELA_FILHA_1 AS TABELA, 1 AS NIVELFROM TB_ADM_NIVEL_1WHERE TABELA_FILHA_1 <> 'TB_PROJETO'UNION-- SCRIPT PARA APAGAR REGISTRO DA TABELA DE PROJETOSELECT 'DELETE FROM TB_SGP_PROJETO WHERE ID_PROJETO = NUMERO;' AS SCRIPT, 'TB_SGP_PROJETO' AS TABELA, 0 AS NIVEL FROM DUAL;Finalmente, rodei o script que realmente importava:-- PARA RECUPERAR SCRIPT DE EXCLUSAO - EXECUTAR O RESULTADOSELECT SCRIPT FROM TB_SCRIPT_DEL_PROJETO ORDER BY NIVEL DESC;Dai foi so colocar o retorno desse script em um bloco anonimo com uma variavel chamada NUMERO. De acordo com o numero indicado, o script no bloco varre as tabelas apagando todas as referencias em tabelas bisnetas, netas, filhas e finalmente pai:-- INFORMAR O NUMERO DO PROJETO A SER DELETADO AQUIDECLARE NUMERO NUMBER := 7777;BEGIN DELETE TB_LANC_ITEM_ORC WHERE TB_LANC_ITEM_ORC.ID_ITEM_ORC IN (SELECT TB_ITEM_ORC.ID_ITEM_ORC FROM TB_ITEM_ORC WHERE TB_ITEM_ORC.ID_ACAO_PARC IN (SELECT TB_ACAO_PARC.ID_ACAO_PARC FROM TB_ACAO_PARC WHERE TB_ACAO_PARC.ID_PROJETO_PARC IN (SELECT TB_PROJ_PARC.ID_PROJETO_PARC FROM TB_PROJ_PARC WHERE TB_PROJ_PARC.ID_PROJETO = NUMERO))) OR TB_LANC_ITEM_ORC.ID_ITEM_ORC IN (SELECT TB_ITEM_ORC.ID_ITEM_ORC FROM TB_ITEM_ORC WHERE TB_ITEM_ORC.ID_ACAO_PARC IN (SELECT TB_ACAO_PARC.ID_ACAO_PARC FROM TB_ACAO_PARC WHERE TB_ACAO_PARC.ID_ACAO IN (SELECT TB_ACAO.ID_ACAO FROM TB_ACAO WHERE TB_ACAO.ID_PROJETO = NUMERO))); DELETE TB_APR_MUD_ACAO_EVENTO WHERE TB_APR_MUD_ACAO_EVENTO.ID_MUD_EVENTO IN (SELECT TB_MUD_EVENTO.ID_MUD_EVENTO FROM TB_MUD_EVENTO WHERE TB_MUD_EVENTO.ID_EVENTO_ACAO