ADD_COMPLEX_SALE이라는 SP가 있습니다. custid, prod id, qty 및 date (varchar2)의 4 개의 매개 변수를 얻습니다.
날짜를 확인하고 올바른 형식인지 확인해야합니다. 프로 시저에 YYYYMMDD로 전송됩니다.
이것이 내가 지금까지 가지고있는 것입니다.
IF (LENGTH(pdate) != 8) THEN
raise_application_error (-20093,' Date not valid');
ELSIF (LENGTH(pdate) = 8)THEN
vDATE := CONVERT(VARCHAR(10), pdate(), 111) AS [YYYY/MM/DD];
END IF;
IF (pdate != 'YYYY/MM/DD') THEN
raise_application_error (-20093,' Date not valid');
END IF;
기본적으로 아이디어는 '실제'날짜 형식으로 변환하여 올바른 형식인지 확인할 수 있습니다. 이 오류가 발생하는 것을 제외하고. 여전히 매우 새로운 PL / SQL이므로 어떤 도움을 주시면 감사하겠습니다.
오류 (42,49) : PLS-00103 : 다음 중 하나를 예상 할 때 "AS"기호를 발견했습니다.. (* % & =-+; </> at in은 mod 나머지가 아닙니다 rem <> 또는! = 또는 ~ => = <= <> 및 또는 like2 like4 likec between || multiset member submultiset
최신 정보:
코드를 다음과 같이 변경했습니다.
vDATE := TO_DATE(pdate, 'yyyymmdd');
IF (pdate != vDATE) THEN
raise_application_error (-20093,' Date not valid');
END IF;
IF (LENGTH(vDATE) != 8) THEN
raise_application_error (-20093,' Date not valid');
END IF;
이제이 오류가 발생합니다.
ORA-20000 : 다른 오류가 발생했습니다 ORA-01861 : 리터럴이 형식 문자열과 일치하지 않습니다
편집 : 마지막 업데이트 오류는 매개 변수가 varchar2이고 변환이 완료된 후 pdate 대신 vDATE를 삽입하는 것을 잊었습니다.
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
변환 후에 그렇게 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다