Se scrivi più di una procedure o function, devi mettere un / dopo la fine di ciascuno.

Ti segnalo due cose:
Nel controllo fatturaFattura metti in where idfattura in modo che la query sia veloce, quellla in cun una subselect e disegnata male

Nella procedure devi metter if not controllaFattura, altrimenti funzionerà al contrario.

Ho verificato con oracle 11 e funziona bene:
codice HTML:
create or replace function controllaFattura(pNumFattura varchar2) return boolean is
risultato boolean;
begin
    if(pNumFattura in (0,3,3,5))
    then
        risultato := true;
    else
        risultato := false;
    end if;
    
    return risultato;
end controllaFattura;
/

create or replace procedure raiseException(pnumFattura in varchar) is
    vNome varchar(20);
    vFattura number := 0;
    fattNonPresente exception;
begin
    if not controllaFattura(pnumFattura)
    then
        raise fattNonPresente;
    end if;
    
  null;
    
exception
    when fattNonPresente then
        dbms_output.put_line('La fattura2 ' || pnumFattura || ' non è stata registrata.');
end raiseException;
/
call  raiseException(1);