首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误: ORA-01790:表达式必须具有与相应表达式相同的数据类型。

错误: ORA-01790:表达式必须具有与相应表达式相同的数据类型。
EN

Stack Overflow用户
提问于 2016-06-24 13:50:18
回答 1查看 3.9K关注 0票数 0

运行以下代码我得到了错误Error: ORA-01790: expression must have same datatype as corresponding expression

代码语言:javascript
运行
复制
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位产品

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-24 14:31:58

因为您是在基本发布版上,这看起来像是11840579。您可能可以通过转换值来绕过它--它不应该是必要的,但这对您来说是错误的:

代码语言:javascript
运行
复制
with x (id, dateN) as
(
  select 1, cast(to_date('2015-05-01 00:00:00','YYYY-MM-DD HH24:MI:SS') as date) from dual
  union all
  select id+1, dateN+1 from x where id < 10
)
select * from x;

在转换中包含额外的元素有点毫无意义;就我个人而言,我更喜欢日期文本:

代码语言:javascript
运行
复制
with x (id, dateN) as
(
  select 1, cast(date '2015-05-01' as date) from dual
  union all
  select id+1, dateN+1 from x where id < 10
)
select * from x;

date '2015-01-01'cast(date '2015-05-01' as date)这两个值是略有不同的类型,内部表示不同,这似乎是造成问题的原因:

代码语言:javascript
运行
复制
select dump(date '2015-05-01', 16) as d1, dump(cast(date '2015-05-01' as date), 16) as d2
from dual;

D1                               D2                             
-------------------------------- --------------------------------
Typ=13 Len=8: df,7,5,1,0,0,0,0   Typ=12 Len=7: 78,73,5,1,1,1,1   

但是,bug还有第二部分,即它可能返回错误的结果。如果您不能修补以避免这个问题,您可以使用旧的分层查询方法:

代码语言:javascript
运行
复制
select level as id, date '2015-05-01' + level - 1 as dateN
from dual
connect by level < 10;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38015049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档