虚拟列分区

Oracle11g 增加了虚拟列的新特性,具体说明如下:

1、只能在堆组织表(普通表)上创建虚拟列,不能在索引组织表、外部表、临时表上创建虚拟列;

2、虚拟列不能是LOB或者RAW类型;

3、虚拟列的值并不是真实存在的,只有用到时,才根据表达式计算出虚拟列的值,磁盘上并不存放。虚拟列的值由ORACLE根据表达式自动计算得出,不可以手动去修改和指定虚拟列的值。

4、可把虚拟列当做分区关键字建立分区表,这是ORACLE 11g的另一新特性--虚拟列分区

创建带有虚拟列的分区表:

   create table test(n1 number, c1 varchar2(80), n2 number generated always as (n1*0.8)) ---创建带有虚拟列的分区

create table test1(n1 number,

c1 varchar2(80),

v1 varchar2(2) generated always as (substr(c1,1,1))

)

partition by list (v1)

(partition v11 values(‘I‘),

partition v12 values(‘O‘),

partition v13 values(‘E‘),

partition v15 values(default)

);

查询:select * from test1 partition(v11);

5、可在虚拟列上建立索引

create index inx_test on test1(v1);

6、如果在已经创建的表中增加虚拟列时,若没有指定虚拟列的字段类型;

ORACLE会根据 generated always as 后面的表达式计算的结果自动设置该字段的类型

7、虚拟列的值由ORACLE根据表达式自动计算得出,不可以做UPDATE和INSERT操作, 可以对虚拟列做 DELETE 操作

8、表达式中的所有列必须在同一张表

9、表达式不能使用其他虚拟列

10、应用举例如下:

当在虚拟列上插入值时,会出现如下所示错误:

正确值插入场景如下所示:

以上虽然没有插入虚拟列的值(也插入不了),但是ORACLE会根据虚拟列的表达式自动计算出虚拟列的值:

可以把虚拟列当做分区关键字建立分区表:

将dbdream表里的数据插入到stream表:

查询数据验证分区建立是否正确:

时间: 2024-11-06 19:02:01

虚拟列分区的相关文章

Oracle 11g新特性虚拟列分区

现在有个需求:一个单据表要按照月份来分区,如果是在Oracle 10g上,只能再加一个字段.在Oracle 11g以后就不一样了,可以用虚拟列处理. SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Oracle 11g 新特性(一)-- 虚拟列

数据库版本: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Oracle11g 增加了虚拟列的新特性, 具体说明如下: 1> 只能在堆组织表(普通表)上创建虚拟列,不能在索引组织表.外部表.临时表上创建虚拟列 2> 虚拟列不能是LOB或者RAW类型 3> 虚拟列的值并不是真实存在的,只有用到时,才根据表达式计算出虚拟列的值,磁盘上并不存放 4> 可把虚拟列当做分区关键字建立分区表,这是ORACLE

Oracle 虚拟列 子分区 virtual column partition

Oracle 11g 虚拟列子分区实验 以下两个create 语句均为创建成功: 需求描述: 项目要求对3个字段进行分区,如时间,小时,还有个区域ID,便联想到虚拟列. drop table test_part purge;   create table test_part  (t_time date,  hour number,  city_id number,  hour_city varchar2(108) GENERATED ALWAYS AS(to_char(hour)||'|'||t

Oracle 11g虚拟列上建分区

在Oracle 11g上,可以在虚拟列上做分区,这个特性还比较有用,下面来做一个测试: SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production PL/SQL Rele

Oracle 11g 虚拟列 Virtual Column介绍

Oracle 11G 虚拟列 Virtual Column Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值. 定义一个虚拟列的语法: column_name [datatype] [GENERATED ALWAYS] AS [expression] [VIRTUAL] 1.虚拟列可以用在select,update,delete语句的where条件中,但是不能用于DML语句 2.可以基于虚拟列来做分区 3. 可以在虚拟列上建索引,o

Oracle 11g新特性之--虚拟列(Virtual Column)

Oracle 11g新特性之--虚拟列(Virtual Column) Oracle 11G虚拟列Virtual Column介绍 Oracle 11G 在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库中,不能更新虚拟列的值. 定义一个虚拟列的语法: column_name [datatype] [GENERATED ALWAYS] AS [expression] [VIRTUAL] 1.虚拟列可以用在select,update,delete语句的where条件中,但是不能用

数据的虚拟列-让数据库中的C字段等于a+b

直接用update aaaaa aa set aa.f = (aa.a+aa.b)就行了 ======================================= 引出来的新知识--虚拟列 虚拟列的好处是:如果c=a+b那插入数据时:值只插入a=1,b=2;那么c会自动是3 oracle temporary table and virtual column (2013-07-31 15:06:55) 转载▼ 标签: oracle 学习 临时表 虚拟列 分类: Oracle基础学习 表是数据

MySQL 5.7 虚拟列 (virtual columns)

参考资料: Generated Columns in MySQL 5.7.5 MySQL 5.7新特性之Generated Column(函数索引) MySQL 5.7原生JSON格式支持 Generated Column 在MySQL 5.7中,支持两种Generated Column,即Virtual Generated Column和Stored Generated Column,前者只将Generated Column保存在数据字典中(表的元数据),并不会将这一列数据持久化到磁盘上:后者

【原创】MySQL5.7 虚拟列实现表达式索引

MySQL自古以来就不提供函数索引这么复杂的功能.那怎么在MySQL里面实现这样的功能呢? 我们先来看看函数索引的概念.函数索引,也可称为表达式索引,也就是基于字段以特定函数(表达式)建立索引来提升查询性能之需.函数索引的优势在于更加精确的获取所需要的数据. MySQL 5.7提供了一个新的特性,虚拟列,可以很完美的解决这个问题. 在介绍虚拟列之前,我们来看看在MySQL里面普通索引的范例. 示例表结构: CREATE TABLE t1 (id INT ,rank INT, log_time D