convert(varchar(10), pdate(), 111)
parece ser uma tentativa de usar o SQL Server convert
função. Isso não vai funcionar no Oracle. Eu apenas faria 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;
Claro, se você quiser fazer várias verificações para poder lançar uma exceção diferente se o comprimento estiver incorreto ou adicionar algumas verificações para garantir que a data seja razoável (ou seja, deve estar nos últimos 100 anos ou não mais de 100 anos em o futuro, etc.) você pode fazer isso após o
to_date
conversão.