暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 由于ORA-01858 , MView刷新失败:发现非数字字符,但应为数字

askTom 2016-09-14
929

问题描述

嗨,汤姆,

我们有一个使用DDL的视图

创建或替换力视图FX_rate
组件
选择
报价_货币
,TO_DATE(UPDATE_TIME,'DD/MM/RR') 组件UPDATE_TIME
,价格
从费率;

费率DDL为:
创建表费率
(
VARCHAR2(3CHAR) ,
更新时间日期,
价格编号(20,10)
);

在另一个DB over DB Link中,在此视图上创建了一个实体化视图。

CREATE MATERIALIZE VIEW MV_FX_RATE (QUOTED_CURR, UPDATE_TIME,价格)
立即生成
按需刷新强制
带主键
组件
选择QUOTED_CURR,UPDATE_TIME,价格 FROM FX_RATE@DB_LINK;

执行定期刷新时,刷新失败,错误为ORA-01858 :在需要数字的位置发现非数字字符。

我怀疑这是因为某些日期问题,但相同的DDL在另一个较低的环境中使用,并且工作正常。不知道是什么原因。
我发现两个环境之间的差异:

非工作环境:
MV表创建为
CREATE TABLE MV_FX_ATE(
VARCHAR2(3CHAR) ,
更新时间日期,
价格编号(20,10)
);

此环境中存在的某些数据可能来自初始创建,并且日期部分也显示时间戳。

工作环境:
MV表创建为
CREATE TABLE MV_FX_ATE(
VARCHAR2(3CHAR) ,
更新时间日期(8) ,
价格编号(20,10)
);

日期部分仅显示日期,而没有显示格式的时间戳。

Is there data issues? But then shouldn't 选择* from FX_RATE also fail when queried on source DB? It is working fine.
是否应将TO_D更改为TRUNC ?

谢谢,
曼涅什



专家解答

Should TO_DATE be changed to TRUNC?

是的!你在约会。这意味着隐式转换大量!

to_date()

其实是:

to_date(to_char())

Oracle使用NLS设置将转换为字符串。不同的客户端可以有不同的设置。这可以解释为什么你只“有时”看到错误。例如:

alter session set nls_date_format = 'dd/mm/rr';

with rws as (
  select sysdate d from dual
)
  select to_date(d, 'dd/mm/rr') from rws;

TO_DATE(D,'DD/MM/RR')  
14/09/16 
   
alter session set nls_date_format = 'DD-MON-YYYY hh24:mi:ss';

with rws as (
  select sysdate d from dual
)
  select to_date(d, 'dd/mm/rr') from rws;

SQL Error: ORA-01858: a non-numeric character was found where a numeric was expected


如果要从日期中“删除”时间,请使用trunc。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论