我们用到的一张表因为资料量比较大,DBA给改成了分区表,按照其中的一个date型字段trans_date分的区
.....
.....
partition SLTS9 values less than (TO_DATE(' 2007-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
.....
.....
存储过程:
create or replace procedure test(date1 in varchar2,date2 in varchar2) is
......
cursor buf is
select columnname from tablename where
trans_date between to_date(date1,'yyyy/mm/dd') and to_date(date2,'yyyy/mm/dd');
begin
......
调试的时候随便给date1,date2赋两个值'2008/04/04','2008/04/05',执行这个游标的时候,报错ORA-01841: (全)年度值必须介于 -4713 和 +9999 之间,且不为 0
我把存储过程的时间参数换成常量的执行就通过了。
cursor buf is
select columnname from tablename where
trans_date between to_date('2008/04/04','yyyy/mm/dd') and to_date('2008/04/05','yyyy/mm/dd');问题应该就出在时间格式上,分区表换成普通表执行也没有问题。
估计是那个时间字段的分区格式(TO_DATE(' 2007-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))有些问题,可是说不清楚是什么问题,也不好要求DBA改回来,因为换成常量执行都正常,其他程序执行SQL都没问题。郁闷。
.....
.....
partition SLTS9 values less than (TO_DATE(' 2007-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))
.....
.....
存储过程:
create or replace procedure test(date1 in varchar2,date2 in varchar2) is
......
cursor buf is
select columnname from tablename where
trans_date between to_date(date1,'yyyy/mm/dd') and to_date(date2,'yyyy/mm/dd');
begin
......
调试的时候随便给date1,date2赋两个值'2008/04/04','2008/04/05',执行这个游标的时候,报错ORA-01841: (全)年度值必须介于 -4713 和 +9999 之间,且不为 0
我把存储过程的时间参数换成常量的执行就通过了。
cursor buf is
select columnname from tablename where
trans_date between to_date('2008/04/04','yyyy/mm/dd') and to_date('2008/04/05','yyyy/mm/dd');问题应该就出在时间格式上,分区表换成普通表执行也没有问题。
估计是那个时间字段的分区格式(TO_DATE(' 2007-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))有些问题,可是说不清楚是什么问题,也不好要求DBA改回来,因为换成常量执行都正常,其他程序执行SQL都没问题。郁闷。
trans_date between to_date(date1,'yyyy/mm/dd') and to_date(date2,'yyyy/mm/dd')
为
to_date(to_char(trans_date,'yyyymmdd'),'yyyy/mm/dd') between to_date(date1,'yyyy/mm/dd') and to_date(date2,'yyyy/mm/dd')
values less than (TO_DATE('2007-03-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS')
不知道为什么我在PL/SQL中看到的却是
values less than (TO_DATE(' 2007-03-01 00:00:00', 'SYYYY-MM-DD HH24:MI:SS', 'NLS_CALENDAR=GREGORIAN'))to qiyousyc,CathySun118 :
改成
cursor buf is
select columnname from tablename where
trans_date between to_date(date1,'syyyy-mm-dd hh24:mi:ss') and to_date(date2,'syyyy-mm-dd hh24:mi:ss');
date1,date2赋值'2008/04/04 07:00:00','2008/04/05 07:00:00'
测试会报另一个错误ORA-01858: 在应为数值之处发现一个非数值的字元to airson79 :
还是报ORA-01841: (全)年度值必须介于 -4713 和 +9999 之间,且不为 0
to_date(date1,'yyyy-mm-dd hh24:mi:ss')