当前位置:  数据库>oracle

Oracle 11g 的新特性 —— 虚拟列

    来源: 互联网  发布时间:2017-04-26

    本文导语: 今天我将为大家解释 Oracle 11g 数据库的新特性 —— 虚拟列 介绍 在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引。 现...

今天我将为大家解释 Oracle 11g 数据库的新特性 —— 虚拟

介绍

在老的 Oracle 版本,当我们需要使用表达式或者一些计算公式时,我们会创建数据库视图,如果我们需要在这个视图上使用索引,我们会创建基于函数的索引。

现在 Oracle 11g 允许我们直接在表上使用虚拟列来存储表达式。

来看一个简单的例子:

1 CREATE TABLE EMP
2 (
3   EMPNO     NUMBER(6),
4   SAL       NUMBER(8,2),
5   COMM      NUMBER(8,2),
6   SAL_PACK  GENERATED ALWAYS AS ( SAL + NVL(COMM,0) ) VIRTUAL
7 );

上述建的虚拟列 SAL_PACK 是由一个简单的表达式创建的,使用的关键字有 VIRTUAL(不过这个关键字是可选的),该字段的值是由 COMM 这个字段通过表达式计算而来的。

虚拟列的值是不存储在磁盘的,它们是在查询时根据定义的表达式临时计算的。

我们不能往虚拟列中插入数据
 
1 SQL> INSERT INTO emp VALUES (10, 1500, 500,2000);
2   
3 ERROR at line 1:
4 ORA-54013: INSERT operation disallowed on virtual columns
我们也不能隐式的添加数据到虚拟列:
 
1 SQL> INSERT INTO t VALUES (10, 1500, 500);
2             *
3 ERROR at line 1:
4 ORA-00947: not enough values
我们只能使用物理列来插入数据。
 
1 SQL> INSERT INTO t (empno, sal,comm) VALUES (10, 1500 , 500);
2 1 row created.
然后可以查询虚拟列的值:
 
1 SQL> select * from emp;
2 EMPNO    SAL        COMM       SAl_PACK
3 -----   ------      -----      --------
4 10      1500        500        2000
5   
6 1 row selected.

表达式是在查询的时候即时计算的,然后输出上述的结果。

虚拟列的索引和约束

索引和约束同样可以应用在虚拟列上。我们可使用如下SQL语句来创建索引:
 
1 SQL> create index sal_pack_idx on emp(sal_pack);
2            Index Created.

我们也可以为虚拟列创建外键

使用 PLSQL 函数来处理虚拟列

虚拟列的定义可使用 PLSQL 函数,但要求该函数必须是确定的:
 
1 CREATE OR REPLACE FUNCTION sum_num (in_num1 NUMBER, in_num2 NUMBER)
2    RETURN NUMBER DETERMINISTIC
3 AS
4 BEGIN
5    RETURN in_num1 + in_num2;
6 END;
然后可以在虚拟列中使用上述函数:
 
1 SQL>ALTER TABLE emp ADD sal_pack_temp GENERATED ALWAYS AS ( sum_num(SAL,COMM) ):
2 Table Altered
虚拟列的注释

为虚拟列创建注释的方法
 
1 SQL> COMMENT ON COLUMN emp.sal_pack IS 'Virtual column [sal+ comm]';
2 Comment created.

上述例子看来虚拟列的功能比视图本身要简单很多。

希望这对你也有用。







    
 
 

您可能感兴趣的文章:

  • Oracle 12c的九大最新技术特性介绍
  • 也谈Oracle 数据库的绑定变量特性及应用
  • Oracle 11g 新特性 Flashback Data Archive 使用实例
  • Oracle9i 动态SGA,PGA特性探索
  • Oracle发布Oracle VM 2.2升级虚拟化平台
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle推最新版Oracle VM服务器虚拟软件
  • 老大们,虚拟机上系统os是linux,我想在它安装oracle,怎么实现?
  • 请教怎样在虚拟机中的linux系统安装 Java环境以及Oracle
  • MySQL类似Oracle的dual虚拟表
  • linux 4虚拟机下安装oracle 10g失败。
  • Oracle虚拟桌面基础架构(VDI)3.2上市
  • RedHat AS 4 安装oracle9i的时候,执行Disk1下的runInstaller后提示正在初始化虚拟机,请等待后就再无反应
  • Linux虚拟机上安装Oracle 10g数据库现让远端的plsql访问
  • Oracle在虚拟化战争中能否胜出
  • 虚拟服务器软件 Oracle VM
  • Oracle VM虚拟机中安装Oracle Clusterware 11g步骤
  • Oracle中虚拟专用数据控制方法研究
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • oracle 11g最新版官方下载地址
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • Linux版本的Oracle 11g将首先被发布
  • 关于Linux下oracle是10g?还是11g?
  • Oracle 11g 相关工具netca,dbca乱码之解决
  • 物理 iis7站长之家
  • Oracle 11g解锁scott
  • Oracle 11g R2 数据库将在9月发布
  • Oracle内存数据库11g和高速缓存11g上市
  • 有人在fedora 10下安装 oracle database 11g,没有呀?提供个安装步骤
  • 在ubuntu10.04上安装oracle11g失败
  • 关于Oracle 11g 闪回的一个小问题
  • Oracle11g备份和恢复功能的提高
  • linux redhat5.6安装oracle11g在自动创建实例时停住不动,有图
  • Oracle针对Eclipse 11g发布开发包
  • centos5.4安装oracle11g的问题
  • Oracle 11g 数据库 Alert日志的新发展
  • Redhat 6 安装 oracle 11g2的问题
  • 基于Linux环境的Oracle 11g数据库正式推出
  • Oracle 11G密码180天过期后的修改方法
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,