convert(varchar(10), pdate(), 111)
изглежда като опит за използване на SQL Server convert
функция. Това няма да работи в Oracle.
Просто бих направил нещо като
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;
Разбира се, ако искате да направите няколко проверки, така че да можете да хвърлите различно изключение, ако дължината е неправилна или да добавите някои проверки, за да сте сигурни, че датата е разумна (т.е. трябва да е в рамките на последните 100 години или не повече от 100 години в бъдещето и т.н.) можете да направите това след to_date
преобразуване.