PL/SQL に日付形式があり、DDMM
それを検証したい場合。それを行う正しい方法は何ですか?
DD
は日で、MM
は蛾です。
For an example:
0208 - is a valid date
3209 - is not a valid date
0113 - is not a valid date.
PL/SQL に日付形式があり、DDMM
それを検証したい場合。それを行う正しい方法は何ですか?
DD
は日で、MM
は蛾です。
For an example:
0208 - is a valid date
3209 - is not a valid date
0113 - is not a valid date.
たとえば、次のような関数を作成できます。
create or replace function is_valid(p_val in 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, 'ddmm');
return 1;
exception
when not_a_valid_day or not_a_valid_month
then return 0;
end;
SQL> with test_dates(dt) as(
2 select '0208' from dual union all
3 select '3209' from dual union all
4 select '0113' from dual
5 )
6 select dt, is_valid(dt) as valid
7 from test_dates
8 /
DT VALID
---- ----------
0208 1
3209 0
0113 0
to_date
入力パラメーターが有効な日付でない場合、例外が発生します。したがって、次のようなことができます。
declare
x date;
begin
x := to_date('3210', 'DDMM'); -- Will raise ORA-1847
x := to_date('0113', 'DDMM'); -- Will raise ORA-1843
exception
when others then
if sqlcode in (-1843, -1847) then
dbms_output.put_line('Invalid Date!');
null;
else
raise;
end if;
end;