|
|
От: |
Пингвиненок
|
|
| Дата: | 21.03.07 13:02 | ||
| Оценка: | 3 (1) | ||
DECLARE
date_variable VARCHAR2 (100) := TO_CHAR (SYSDATE, 'mon dd yyyy');
FUNCTION is_date (STRING VARCHAR2)
RETURN BOOLEAN
IS
CURSOR c (separator VARCHAR2)
IS
SELECT f
FROM (SELECT UPPER (d.d || separator || m.m || separator || y.y
) AS f
FROM (SELECT 'DD' AS d
FROM DUAL) d,
(SELECT 'MM' AS m
FROM DUAL
UNION ALL
SELECT 'RM' AS m
FROM DUAL
UNION ALL
SELECT 'MONTH' AS m
FROM DUAL
UNION ALL
SELECT 'MON' AS m
FROM DUAL) m,
(SELECT 'YYYY' AS y
FROM DUAL
UNION ALL
SELECT 'SYYYY' AS y
FROM DUAL
UNION ALL
SELECT 'IYYY' AS y
FROM DUAL
UNION ALL
SELECT 'YYY' AS y
FROM DUAL
UNION ALL
SELECT 'YY' AS y
FROM DUAL
UNION ALL
SELECT 'Y' AS y
FROM DUAL
UNION ALL
SELECT 'IYY' AS y
FROM DUAL
UNION ALL
SELECT 'IY' AS y
FROM DUAL
UNION ALL
SELECT 'I' AS y
FROM DUAL
UNION ALL
SELECT 'Y,YYY' AS y
FROM DUAL
UNION ALL
SELECT 'YEAR' AS y
FROM DUAL
UNION ALL
SELECT 'SYEAR' AS y
FROM DUAL
UNION ALL
SELECT 'RR' AS y
FROM DUAL) y
UNION ALL
SELECT UPPER (m.m || separator || d.d || separator || y.y
) AS f
FROM (SELECT 'DD' AS d
FROM DUAL) d,
(SELECT 'MM' AS m
FROM DUAL
UNION ALL
SELECT 'RM' AS m
FROM DUAL
UNION ALL
SELECT 'MONTH' AS m
FROM DUAL
UNION ALL
SELECT 'MON' AS m
FROM DUAL) m,
(SELECT 'YYYY' AS y
FROM DUAL
UNION ALL
SELECT 'SYYYY' AS y
FROM DUAL
UNION ALL
SELECT 'IYYY' AS y
FROM DUAL
UNION ALL
SELECT 'YYY' AS y
FROM DUAL
UNION ALL
SELECT 'YY' AS y
FROM DUAL
UNION ALL
SELECT 'Y' AS y
FROM DUAL
UNION ALL
SELECT 'IYY' AS y
FROM DUAL
UNION ALL
SELECT 'IY' AS y
FROM DUAL
UNION ALL
SELECT 'I' AS y
FROM DUAL
UNION ALL
SELECT 'Y,YYY' AS y
FROM DUAL
UNION ALL
SELECT 'YEAR' AS y
FROM DUAL
UNION ALL
SELECT 'SYEAR' AS y
FROM DUAL
UNION ALL
SELECT 'RR' AS y
FROM DUAL) y) f;
temp DATE;
res BOOLEAN;
BEGIN
res := TRUE;
FOR r IN c ('.')
LOOP
BEGIN
temp := TO_DATE (STRING, r.f);
RETURN TRUE;
EXCEPTION
WHEN OTHERS
THEN
NULL;
END;
END LOOP;
RETURN FALSE;
EXCEPTION
WHEN OTHERS
THEN
RETURN FALSE;
END;
BEGIN
IF is_date (date_variable)
THEN
DBMS_OUTPUT.put_line (date_variable || ' - Date.');
ELSE
DBMS_OUTPUT.put_line (date_variable || ' - Not date.');
END IF;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (SQLERRM);
END;