【发布时间】:2016-06-24 13:50:18
【问题描述】:
运行以下我得到错误Error: ORA-01790: expression must have same datatype as corresponding expression
with x (id, dateN) as
(
select 1, to_date('2015-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS') from dual
union all
select id+1, dateN+1 from x where id < 10
)
select * from x
我尝试了不同的转换,例如 to_char、时间戳、+ 间隔“1”天等等,但这个错误不断出现。在 Mssql 上,通过函数 dateadd('dd', 1, dateN) 很容易,但这里不太明显如何实现。
Oracle 数据库 11g 企业版 11.2.0.1.0 - 64 位生产
【问题讨论】:
-
我认为它是日期,但我也尝试将它作为时间戳。哦,对不起,我弄错了,是dateN。
-
您是否要生成一系列日期?
-
我是,每个下一个生成的日期应该比前一天多一天,第一个在第一个选择中生成。
-
您展示的内容有效(在 11gR2 中;我认为您必须使用它,否则您会得到 ORA-32033);那么你的
where子句中有什么来限制递归?还是您的真实查询还有更多未显示的内容? -
“任意”是什么意思?它必须有一些限制,否则它会尝试生成未来的每个日期,直到它在 9999-12-31 之后失败。我的意思是,错误似乎出在您未显示的内容中。这(和 vkp 的限制;以及您编辑的版本)在 11.2.0.4 中工作正常。我不记得有这样的错误,虽然递归 CTE 在 11.2.0.1 中是新的,所以有可能......或者你的客户正在破坏它?你在哪里运行这个?