convert(varchar(10), pdate(), 111)
parece ser un intento de usar SQL Server convert
función. Eso no va a funcionar en Oracle.
Simplemente haría algo como
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;
Por supuesto, si desea realizar varias comprobaciones para poder lanzar una excepción diferente si la longitud es incorrecta o agregar algunas comprobaciones para garantizar que la fecha sea razonable (es decir, debe estar dentro de los últimos 100 años o no más de 100 años en el futuro, etc.) podría hacerlo después de to_date
conversión.