使用connect by 生成指定时间的连续日期报错

0 0wxcbv 8个月前 397次点击

grammar设置的是oracle

脚本:

SELECT TO_CHAR(sysdate - 6 + ROWNUM - 1, 'yyyymmdd') AS daylist

FROM DUAL
CONNECT BY ROWNUM <=
trunc(to_date(to_char(sysdate, 'yyyymmdd'),
'yyyymmdd') -
to_date(to_char(sysdate - 6, 'yyyymmdd'),
'yyyymmdd')) + 1

错误信息是:SQL 错误 [42710]: ERROR: CONNECT BY loop in user data使用connect by 生成指定时间的连续日期报错

共 3 条评论
kxlcq3 8个月前
0 

select TO_CHAR(sysdate - 6 + level - 1, 'yyyymmdd')
from dual
connect by level<=7

kxlcq3 8个月前
0 

select TO_CHAR(sysdate - 6 + level - 1, 'yyyymmdd')
from dual
connect by level<=7

7381bn 8个月前
0 

sql语句有问题,产生了死循环。

解决方法:

方案1:在connect by  后面加上nocycle,不循环。结果可能就不是想要的结果。

antdb=# /*ora*/ SELECT TO_CHAR(sysdate - 6 + ROWNUM - 1, 'yyyymmdd') AS daylist
antdb-# FROM DUAL
antdb-# CONNECT BY NOCYCLE ROWNUM <=
antdb-# trunc(to_date(to_char(sysdate, 'yyyymmdd'),
antdb(# 'yyyymmdd') -
antdb(# to_date(to_char(sysdate - 6, 'yyyymmdd'),
antdb(# 'yyyymmdd')) + 1;
DAYLIST
----------
20230706
(1 row)

方案2:查出造成死循环的原因,修改sql。

添加一条新评论

登录后可以发表评论 去登录

作者

积分:10

点击上方头像,查看更多我的其他问答
作者其它话题