[Resolvido] - PL/SQL

Bom dia pessoal;

Estou com dificuldades em uma pequena query.

Possuo uma tabela que possui uma constraint entre ela mesma e preciso apagar todo esse registro, lembrando que já tentei desativar a constraint porém não possuo privilégios sulficientes.

Segue tabela:

Tabela1

id | nome | id_pai

1 | João | 
2 | Maria| 1
3 | Joana| 2
4 | Marta |
5 | Dito | 

o que estou querendo, primeiramente é somente exibir os registros que possuem pai e que são pai, no caso do exemplo apenas os registros 1, 2 e 3.

Alguém me dá uma dica, pois quando faço um select com um where id = id_pai, não obtenho nenhum resultado.

Obrigado.

Registros 1, 2, 3
Registros que tem pai OU que são pai:

select
 *
from
 tabela
where
 id_pai is not null or
 id in ( select id_pai from tabela where id_pai is not null )

Trocando o OR por AND retorna os registros que tem pai E que são pai também. No caso só a Maria.

Talvez tem algum jeito mais otimizado…

Obrigado pela ajuda.

Visualizei os registros da seguinte maneira:

SELECT distinct id, id_pai, LEVEL FROM tabela1
CONNECT BY PRIOR id = id_pai
ORDER BY LEVEL

e deletei da seguinte maneira:

delete from tabela1 
where id in (select id from tabela1 where LEVEL = 2
CONNECT BY PRIOR id = id_pai)

vlw pela atenção