Verificando se uma string é um tipo data com PL/SQL
Um snippet de código de um exemplo didático (sem considerar o desempenho) de como validar uma data usando o tratamento de exceções e os blocos aninhados do PL/SQL.
DECLARE
v_date VARCHAR2 (20) := '01-02-2009';
BEGIN
DBMS_OUTPUT.put_line (TO_DATE (v_date, 'mm/dd/yyyy'));
EXCEPTION
WHEN OTHERS
THEN
BEGIN
DBMS_OUTPUT.put_line (TO_DATE (v_date, 'mm-dd-yyyy'));
EXCEPTION
WHEN OTHERS
THEN
BEGIN
DBMS_OUTPUT.put_line (TO_DATE (v_date, 'MON dd yyyy'));
EXCEPTION
WHEN OTHERS
THEN
BEGIN
DBMS_OUTPUT.put_line (TO_DATE (v_date, 'mm-dd-yy'));
EXCEPTION
WHEN OTHERS
THEN
BEGIN
DBMS_OUTPUT.put_line (TO_DATE (v_date, 'mm/dd/yy'));
EXCEPTION
WHEN OTHERS
THEN
BEGIN
DBMS_OUTPUT.put_line (TO_DATE (v_date, 'dd-mm-yy'));
EXCEPTION
WHEN OTHERS
THEN
BEGIN
DBMS_OUTPUT.put_line (TO_DATE (2439856 + v_date, 'j'));
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (TO_DATE(NULL));
END;
END;
END;
END;
END;
END;
END;