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

Posted

技术标签:

【中文标题】Oracle 10G 中的更改表 - 虚拟列【英文标题】:Alter table in Oracle 10G - virtual column 【发布时间】:2014-10-23 02:36:59 【问题描述】:

我是 Oracle DB 的新手。当我在 Oracle 数据库版本中执行时:Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production 以下代码:

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

我得到成功的输出: 表 TEMP_WORKING_TABLE_1 已更改。

但是当我在版本中执行相同的代码时:Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production 我得到一个错误:

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 中使用虚拟列。

【问题讨论】:

在 10g 中创建视图。 【参考方案1】:

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

根据您尝试使用虚拟列完成的任务,一些潜在的解决方法是创建视图、物化视图或基于函数的索引。

【讨论】:

以上是关于Oracle 10G 中的更改表 - 虚拟列的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 用虚拟列创建表

是否可以在 HSQLDB 中有虚拟列

ORACLE 10g 中的三列字符串聚合

根据 Oracle 10g PL/SQL 中的内容将行转为列

PL/SQ连接oracle,L 新建表的时候, virtual那一列是啥意思

在 oracle 10g 中添加自动增量和自动减量列