【发布时间】:2019-03-25 20:46:54
【问题描述】:
我从这个问题Create View with 365 days中找到了行生成器的代码
CREATE VIEW year_days (the_day) AS
SELECT TRUNC(SYSDATE, 'YYYY') + (LEVEL-1) AS the_day
FROM DUAL
CONNECT BY LEVEL <= TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'),11)), 'DDD'))
/
SELECT * FROM year_days
由于我没有CREATE权限,我将其修改为内联查询表单:
SELECT
year_days.*
FROM
(
SELECT TRUNC(SYSDATE, 'YYYY') + (LEVEL-1) AS the_day
FROM DUAL
CONNECT BY LEVEL <= TO_NUMBER(TO_CHAR(LAST_DAY(ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'),11)), 'DDD'))
) year_days
上面的内联查询代码在我们的一个 Oracle 11g R2 (v11.2.0.3.0) 实例以及 Oracle 自己的 LiveSQL (19c, v19.2.0.0.0) 上运行良好。
但是,它不适用于需要运行的实例,即 8i (v8.1.7.4.0)。 我得到ORA-01436: CONNECT BY loop in user data。
乍一看,8i 似乎在该代码中看到了无限循环,但在 11g 及更高版本中却没有。为什么?
注意:我知道 8i 已经过时了。我无法控制。
【问题讨论】:
标签: sql oracle connect-by oracle8i