convert(varchar(10), pdate(), 111)
sembra essere un tentativo di utilizzare la convert
di SQL Server funzione. Non funzionerà in Oracle.
Farei semplicemente qualcosa del tipo
DECLARE
l_dt date;
BEGIN
l_dt := to_date( pdate, 'yyyymmdd' );
EXCEPTION
WHEN others
THEN
raise_application_error( -20001, pdate || ' is not a date in the format YYYYMMDD' );
END;
Naturalmente, se si desidera eseguire più controlli in modo da poter generare un'eccezione diversa se la lunghezza non è corretta o aggiungere alcuni controlli per assicurarsi che la data sia ragionevole (ovvero deve rientrare negli ultimi 100 anni o non più di 100 anni in il futuro, ecc.) potresti farlo dopo il to_date
conversione.