目前,在写oracle存储过程,调试如下SQL语句报错:
viDays := to_number(to_date(vtEndDate, 'YYYY-MM-DD') - to_date(vtBegDate, 'YYYY-MM-DD')) + viAddDays;
错误:
ORA-01841: (完整) 年份值必须介于 -4713 和 +9999 之间, 且不为 0查询参数表时:
NLS_DATE_FORMAT参数是'DD-MON-RR' show parameter NLS_DATE_FORMAT
SQL> show parameter NLS_DATE_FORMAT
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_date_format string
不知道这是不是NLS_DATE_FORMAT设置的问题,请高手指点?
viDays := to_number(to_date(vtEndDate, 'YYYY-MM-DD') - to_date(vtBegDate, 'YYYY-MM-DD')) + viAddDays;
错误:
ORA-01841: (完整) 年份值必须介于 -4713 和 +9999 之间, 且不为 0查询参数表时:
NLS_DATE_FORMAT参数是'DD-MON-RR' show parameter NLS_DATE_FORMAT
SQL> show parameter NLS_DATE_FORMAT
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
nls_date_format string
不知道这是不是NLS_DATE_FORMAT设置的问题,请高手指点?
--修改会话格式语法为:
alter session set nls_date_format='yyyy-mm-dd';
--你这不是会话日期格式的问题,
--看错误提示:
--ORA-01841: (完整) 年份值必须介于 -4713 和 +9999 之间, 且不为 0
--很明显,你将日期加减后得到的结果不在年份值[-4713 , +9999]之间
碰到过这种问题,有一次一个表里边有一条年份超过10000的数据,是前端通过ejb加入的,
(我自己尝试,用各种加载策略都加不进去,实在不知道web端ejb怎么加到表里边的)
然后操作这个表的时候,就报同样的错误了。
年份超出oracle的时间范围了。eg:
SQL> select to_date('00000101','yyyymmdd') from dual;
select to_date('00000101','yyyymmdd') from dual
*
ERROR at line 1:
ORA-01841: (full) year must be between -4713 and +9999, and not be 0