我在包中有以下查询
l_sql := 'SELECT table_name.field1,
table_name.field2,
table_name.field3
FROM table_name
WHERE table_name.status = ''ACTIVE'' AND
table_name.replication_date >= SYSDATE - :l'
OPEN zequi_cur FOR l_sql USING l_days_between_start;
理想情况下,它应该只选择满足条件SYSTDATE-:l
的那些记录。 l
的值为730492
。但它仍然取得所有记录。此表有大约3000万条记录,这使得此查询永远返回。任何想法,可能是因为它没有获取特定的记录?
答案 0 :(得分:4)
SYSDATE-730492给出了公元10年的日期,即2000年前的日期。我无法想象你的意思是什么?
如果您的开始日期是在0010年,您将得到730492差异:
SQL> select to_date ('22-NOV-2010 04.50.18 PM','DD-MON-YYYY HH.MI.SS AM')
2 - to_date ('16-NOV-0010 04.59.22 PM','DD-MON-YYYY HH.MI.SS AM') as diff
3 from dual;
DIFF
----------
730492.994
答案 1 :(得分:2)
要在@Tony的帖子上略微扩展,当您从DATE值中减去一个数字时,该数字的度量单位将被假定为天数。因此,减去730492天相当于减去约2000年。我怀疑那不是你想做的事。
分享并享受。
答案 2 :(得分:2)
除了修复日期范围外,还有什么特别的理由使用动态SQL吗?也许最好使用静态游标:
declare
cursor c_cur(b_offset in number) is
SELECT table_name.field1,
table_name.field2,
table_name.field3
FROM table_name
WHERE table_name.status = ''ACTIVE'' AND
table_name.replication_date >= SYSDATE - b_offset
;
begin
open c_cur(l_days_between_start);
...
end;