首页 文章

更改Oracle 10G中的表 - 虚拟列

提问于
浏览
1

我是Oracle DB的新手 . 当我在Oracle数据库版本中执行时:Oracle Database 11g企业版11.2.0.3.0版 - 64位生成以下代码:

ALTER TABLE TEMP_WORKING_TABLE_1 
ADD (CD1 AS ( CAST(MYDATE - 1 AS TIMESTAMP(6)) ) VIRTUAL NOT NULL);

我获得了成功的输出:表TEMP_WORKING_TABLE_1已更改 .

但是当我在版本中执行相同的代码时:Oracle数据库10g企业版10.2.0.4.0版 - 64位 生产环境 我收到错误:

ALTER TABLE TEMP_WORKING_TABLE_1 
ADD (CD1 AS ( CAST(MYDATE - 1 AS TIMESTAMP(6)) ) VIRTUAL NOT NULL)
Error SQL: ORA-00902: invalid datatype
00902. 00000 -  "invalid datatype"

任何想法为什么我得到这个输出?此代码的任何解决方法?

编辑:

我的代码如下:

create table TEMP_WORKING_TABLE_1 compress as select * from myTable partition(P20141023);

ALTER TABLE TEMP_WORKING_TABLE_1 
ADD (MYDATE AS ( CAST(CREATION_DATE - 1 AS TIMESTAMP(6)) ) VIRTUAL NOT NULL);
create table TEMP_WORKING_TABLE_2 compress as 
select COLUMN1,COLUMN2,MYDATE AS CREATION_DATE,COLUMN3
from TEMP_WORKING_TABLE_1;
;
ALTER TABLE myTable EXCHANGE PARTITION P20141022 WITH TABLE TEMP_WORKING_TABLE_2 INCLUDING INDEXES WITHOUT VALIDATION UPDATE GLOBAL INDEXES;

我正在尝试交换分区 . 我在Oracle 11G中使用虚拟列 .

1 回答

  • 2

    虚拟列是new feature of 11gR1,它们在10g中不存在 .

    根据您尝试使用虚拟列完成的操作,一些可能的解决方法是创建视图,物化视图或基于函数的索引 .

相关问题