我通过这种方式使用递归获得范围没有问题:
WITH T1 AS (
SELECT 1 ID, DATE '2010-08-10' STARTDATE, DATE '2010-08-12' UPTODATE FROM DUAL UNION ALL
SELECT 2 ID, DATE '2010-08-08' STARTDATE, DATE '2010-08-15' UPTODATE FROM DUAL
)
SELECT STARTDATE + LEVEL - 1 DT FROM T1
CONNECT BY LEVEL <= UPTODATE - STARTDATE
AND PRIOR ID = ID
AND PRIOR SYS_GUID() IS NOT NULL;
从物理表
CREATE TABLE T2 (ID NUMBER(1), STARTDATE DATE, UPTODATE DATE);
INSERT INTO T2 VALUES (1, DATE '2010-08-10', DATE '2010-08-12');
INSERT INTO T2 VALUES (2, DATE '2010-08-08', DATE '2010-08-15');
SELECT STARTDATE + LEVEL - 1 DT FROM T2
CONNECT BY LEVEL <= UPTODATE - STARTDATE
AND PRIOR ID = ID
AND PRIOR SYS_GUID() IS NOT NULL;
出现周期错误 ORA-01436 ,但我发现这些数据和请求完全相同。
可能是什么问题,要找什么?
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
答案 0 :(得分:1)
这似乎是错误6451127,它特定于您正在使用的Oracle版本。
错误报告中的示例在prior
子句prevent cycling but still generate all the rows in the range中使用了不同的非确定性函数,但对我来说看起来也是同样的问题。
您可以从My Oracle Support获取该错误的详细信息,可能的解决方法以及有关补丁的信息;从文档ID 732871.1开始,链接到bug和补丁。我无法在这里复制来自MOS的任何信息,所以不幸的是,这将是模糊的。
如果您想确认它是同一件事,您可能需要或想要提出服务请求。