我有这个功能,当天不合格时,需要一个月的最后一天:
create or replace function updateDate(p_date varchar2) return date as
l_date date;
e_bad_day exception;
pragma exception_init (e_bad_day, -1847);
begin
begin
-- try to convert
l_date := to_date(p_date ,'yyyymmdd') ;
exception
when e_bad_day then
-- ignore the supplied day value and get last day of month
l_date := last_day(to_date(substr(p_date, 1, 6), 'yyyymm'));
end;
return l_date;
end;
在我遇到这些错误之前一切正常。似乎有些年份不正确,我该如何解决这个问题?
java.sql.SQLDataException:ORA-01841:L'année(complète)doitêtre 包括entre -4713 et +9999etêtredifférentede0
ORA-06512:à“CRPCEN1.UPDATEDATE”,ligne 8
我尝试通过添加此声明来修复此问题,但它不起作用,因为我没有使用12g:
to_date(p_date default null on conversion error, 'yyyymmdd')
答案 0 :(得分:1)
将您的代码更改为:
create or replace function updateDate(p_date varchar2) return date as
l_date date;
e_bad_day exception;
pragma exception_init (e_bad_day, -1847);
begin
begin
l_date := to_date(p_date ,'yyyymmdd') ;
exception
when e_bad_day then
-- ignore the supplied day value and get last day of month
l_date := last_day(to_date(substr(p_date, 1, 6), 'yyyymm'));
end;
return l_date;
exception
when others then
Raise_Application_Error(-20001, 'Cannot convert "'||p_date||'"', TRUE);
end;
然后你应该在错误信息中看到错误的值。
如果您不想收到任何错误,可以使用此错误:
exception
when others then
RETURN NULL;
或
exception
when others then
RETURN SYSDATE;
然而,这更像是"我闭上眼睛以忽略错误"