2013-12-22 6 views
-1

모든 형식의 유효 날짜를 확인하고 싶습니다.주어진 날짜 유효한 오라클

이 오류가 발생합니다.

내 입력 IDateFormat = 'MM/YY/DD'이며 IStringDate = '2001-01-01'

나는 아래의 오류를 얻고있다.

ORA-01843 : 유효한 월

ORA-06512 : 2011-01-01 프로세스가 종료 10 행에서 "NECHO_APP.CONVERTTODATE"ORA-06512에서.

CREATE OR REPLACE PROCEDURE convertToDate 
       (IDateFormat  Varchar2, 
       IStringDate  Varchar2, 
       OConvertedDate out timestamp, 
        OError OUT   Int) 

AS 

    TDateFormat  Varchar2(20); 
    TStringDate  Varchar2(20); 

BEGIN 

OError := 0; 
TDateFormat := LTrim(RTrim(IDateFormat)); 
TStringDate := LTrim(RTrim(IStringDate)); 
DBMS_OUTPUT.PUT_LINE(TStringDate); 
IF IS_VALID(TStringDate,'yyyy-mm-dd') = 1 THEN 

     SELECT TO_DATE(TStringDate,TDateFormat) INTO OConvertedDate FROM DUAL; 
      OError := 0; 
END IF; 

END; 

- FUNCTION: 

    create or replace function is_valid(p_val in varchar2, fmt varchar2) 
    return number 
    is 

     not_a_valid_day exception; 
     not_a_valid_month exception; 
     pragma exception_init(not_a_valid_day, -1847); 
     pragma exception_init(not_a_valid_month, -1843); 
     l_date date; 
    begin 
     l_date := to_date(p_val, fmt); 

     return 1; 
    exception 
     when not_a_valid_day or not_a_valid_month 
     then return 0; 
    end is_valid; 
+0

to_date 함수의 입력 매개 변수와 함수 사이에 혼란이 있습니다. to_date의 몇 가지 예를 살펴 보시기 바랍니다. –

+0

스택 오버 플로우에서 받아 들여진 솔루션을 생각해 냈습니다. http://stackoverflow.com/questions/14524448/pl-sql-check-date-is-valid – user3117500

+0

is_valid 함수에는 아무런 문제가 없습니다. 나는 to_date 함수에 대해 이야기하고있다. TO_DATE 함수는 문자열을 날짜로 변환하는 데 사용됩니다. 한 형식에서 다른 형식으로 날짜를 변환하지 않습니다 –

답변

1

SELECT TO_CHAR(TO_DATE(TStringDate,'YYYY-MM-DD'),TDateFormat) INTO OConvertedDate FROM DUAL; 

그러나, 당신은 TO_DATE와 TO_CHAR의 사용을 통해 이동해야 사용해야합니다.

+0

위의 옵션도 작동하지 않습니다. – user3117500