可以在Oracle中更改date数据类型的固定字节值吗?

时间:2014-07-18 01:53:50

标签: oracle oracle10g

任何人都可以帮助我..如果可以从oracle默认为sysdate更改日期数据类型的7字节的固定字节类型吗?

我们可以把它改成8吗? bcoz我默认在某处学习它可以是7或8?

请提前帮助和谢谢。

1 个答案:

答案 0 :(得分:0)

日期的存储空间大小无法更改。 7到8个字节之间的差异取决于上下文。日期文字或日期表达式使用8个字节,但存储的日期总是使用7个字节。

create table table1(a date);
insert into table1 values(date '2000-01-01');

select
    dump(a) variable,
    dump(a+1) expression,
    dump(sysdate) "SYSDATE",
    dump(date '2000-01-01') literal
from table1;

VARIABLE:   Typ=12 Len=7: 120,100,1,1,1,1,1
EXPRESSION: Typ=13 Len=8: 208,7,1,2,0,0,0,0
SYSDATE:    Typ=13 Len=8: 222,7,7,19,1,18,20,0
LITERAL:    Typ=13 Len=8: 208,7,1,1,0,0,0,0

这意味着视图中的DATE可能看起来是7或8个字节。

create or replace view view1 as 
select a a, a+1 a_1, sysdate a_sysdate, date '2000-01-01' a_literal
from table1;

select dump(a), dump(a_1), dump(a_sysdate), dump(a_literal) from view1;

A:         Typ=12 Len=7: 120,100,1,1,1,1,1
A_1:       Typ=13 Len=8: 208,7,1,2,0,0,0,0
A_SYSDATE: Typ=13 Len=8: 222,7,7,19,1,34,47,0
A_LITERAL: Typ=13 Len=8: 208,7,1,1,0,0,0,0

select column_name, data_type, data_length
from user_tab_columns
where table_name = 'VIEW1';

COLUMN_NAME  DATA_TYPE  DATA_LENGTH
-----------  ---------  -----------
A            DATE                 7
A_1          DATE                 8
A_SYSDATE    DATE                 8
A_LITERAL    DATE                 8

我之前从未听说过这种DATA_LENGTH差异造成的问题。如果它确实是导致错误的原因,则可能的解决方法是将列创建为A+0,而不仅仅是A。但请记住,将常规列转换为表达式是一个坏主意 - 它可能会对索引访问,分区修剪和优化程序估计产生负面影响。

相关问题