Basta consultar o dicionário de dados e ver quais objetos estão com status INVÁLIDO:
SELECT *
FROM DBA_OBJECTS
WHERE OBJECT_TYPE = 'TRIGGER'
AND STATUS = 'INVALID';
Com DBA_OBJECTS você consegue pegar todos os objetos do database, caso precise especificar o shema basta colocar OWNER no select acima, caso não tenha a ROLE DBA atribuída ao seu usuário pode tentar com a ALL_OBJECTS que pega todos os objetos acessíveis ao usuário logado e tem ainda a USER_OBJECTS que mostra somente os objetos do usuário logado, e por isso este ultimo não tem a coluna OWNER.
Mas antes de eu ver o teu post, criei uma instrução PL/SQL para isto.
Tinha quase certeza que havia uma forma mais simples, porém não havia encontrado.
Então fiz o seguinte:
set serveroutput on
begin
declare
cursor lc_user_trigger
is
--
-- Carrega todas as triggers.
--
select *
from USER_TRIGGERS
order by Trigger_Name
;
ls_trigger_error varchar2(100);
begin
--
-- Percorre cada trigger...
--
for lc_ut in lc_user_trigger
loop
begin
--
-- Verifica se a trigger está com erro de compilação.
--
execute immediate 'alter trigger '||lc_ut.Trigger_Name||' compile';
exception
when OTHERS
then
ls_trigger_error := chr(10)||ls_trigger_error||lc_ut.Trigger_Name||chr(10);
end;
end loop;
DBMS_OUTPUT.put_line('Triggers com erro: '||ls_trigger_error);
end;
end;
Assim ele me retornou corretamente as triggers com erro de compilação.
Porém acredito que este select é muito mais simples do que isto que fiz… rsrsrsrsrsrsrsrs
Mas não custa nada treinar um pouco de PL/SQL.