【问题标题】:How to insert a date "00000/00/00 00:00:00" (dump = Typ=12 Len=7: 1,1,1,1,1,1,1,1) in a table?如何在表格中插入日期“00000/00/00 00:00:00”(转储 = Typ=12 Len=7: 1,1,1,1,1,1,1,1)?
【发布时间】:2019-09-13 22:22:03
【问题描述】:

我对旧应用程序有疑问。我尝试使用值 01-JAN-99 更新日期字段,但我的应用程序立即崩溃。 其实我在用oracle函数dump()获取值的时候,看到表中有一个奇怪的日期值: Typ=12 Len=7: 1,1,1,1,1,1,1 并在我使用 to_char(t$demi, 'SYYYY/MM/DD HH24:MI:SS') => 00000/00/00 00:00:00 获得值之后。

select 
 t$demi
 ,dump (t$demi) 
 ,to_char(t$demi, 'SYYYY/MM/DD HH24:MI:SS')
from 
T;

结果:

01-JAN-99   Typ=12 Len=7: 199,199,1,1,1,1,1  9999/01/01 00:00:00
01-JAN-99   Typ=12 Len=7: 1,1,1,1,1,1,1 00000/00/00 00:00:00

如何在现有表中插入或更新此类值?

【问题讨论】:

  • 请发布崩溃的 [SQL] UPDATE 语句。如果您收到错误消息,请同时发布。供您参考,Oracle 的 DATE 数据类型使用 7(七)字节的存储空间。这个旧的 Oracle 9i documentation 包含一个示例和解释。

标签: sql oracle


【解决方案1】:

感谢Trying to export a Oracle via PL/SQL gives a date of 0000-00-00这个帖子

我使用 dbms_stats.convert_raw_value('01010101010101', d) 转换了转储 我用原始值更新了表格

create table t42(dt date);

declare
    d date;
begin

    dbms_stats.convert_raw_value('01010101010101', d);
    insert into t42 (dt) values (d);
end;
/
select 
  dt,
  dump(dt), 
  to_char(dt, 'SYYYY/MM/DD HH24:MI:SS')
from t42

select * from t42 

结果

9999-01-01 00:00:00 Typ=12 Len=7: 1,1,1,1,1,1,1 00000/00/00 00:00:00

而且很奇怪,因为该值小于当前日期…… 9999小于2019!!!

select 
  dt,
  dump(dt), 
  to_char(dt, 'SYYYY/MM/DD HH24:MI:SS')
from t42
where dt < SYSDATE ;

9999-01-01 00:00:00 Typ=12 Len=7: 1,1,1,1,1,1,1 00000/00/00 00:00:00

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2015-02-03
    • 1970-01-01
    相关资源
    最近更新 更多