`

11g的一个新功能虚列

 
阅读更多
可以不需要触发器的情况下,使用数据。实际中可以有一些特殊用途
网上的一个例子:
虚拟列为您提供了灵活性,可以添加传达商业规则的列,而不增加任何复杂性或性能影响。
大大减轻了开发的工作量,但在建模方面需要增加工作量。

--创建一个测试表
其中包括员工编号(pno),姓名(pname),薪水(salary),级别(plevel)四列

其中级别(plevel)是虚拟列,是根据薪水的多少自动算出来的,分为三个等级 PG,SE,SSE

换算关系是这样的: salary <=2000 plevel = PG
salary >2000 and salary <=7000 plevel = SE
salary >7000 plevel = SSE



--测试过程

PENG11G(sys)>conn sys/sys@peng11g as sysdba
已连接。
PENG11G(sys)>select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE 11.1.0.6.0 Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

/**********************************************************************************************/
create table vc_test(pno varchar2(6),
pname varchar2(10),
salary number(10,2),
plevel varchar2(3)
generated always as(
case
when salary <= 2000 then 'PG'
when salary > 2000 and salary <= 7000 then 'SE'
when salary > 7000 then 'SSE'
else null
end ) virtual
);
/**********************************************************************************************/

PENG11G(sys)>create table vc_test(pno varchar2(6),
2 pname varchar2(10),
3 salary number(10,2),
4 plevel varchar2(3)
5 generated always as(
6 case
7 when salary <= 2000 then 'PG'
8 when salary > 2000 and salary <= 7000 then 'SE'
9 when salary > 7000 then 'SSE'
10 else null
11 end ) virtual
12 );

表已创建。

PENG11G(sys)>desc vc_test;
名称 是否为空? 类型
----------------------------------------------------- -------- -----------------
PNO VARCHAR2(6)
PNAME VARCHAR2(10)
SALARY NUMBER(10,2)
PLEVEL VARCHAR2(3)

/**********************************************************************************************/
insert into vc_test (pno, pname, salary) values ('000001','张三',1500);
insert into vc_test (pno, pname, salary) values ('000002','李四',2500);
insert into vc_test (pno, pname, salary) values ('000003','王五',4500);
insert into vc_test (pno, pname, salary) values ('000004','周二',1500);
insert into vc_test (pno, pname, salary) values ('000005','刘六',8500);
insert into vc_test (pno, pname, salary) values ('000006','待定',null);

/**********************************************************************************************/


PENG11G(sys)>insert into vc_test (pno, pname, salary) values ('000001','张三',1500);

已创建 1 行。

PENG11G(sys)>insert into vc_test (pno, pname, salary) values ('000002','李四',2500);

已创建 1 行。

PENG11G(sys)>insert into vc_test (pno, pname, salary) values ('000003','王五',4500);

已创建 1 行。

PENG11G(sys)>insert into vc_test (pno, pname, salary) values ('000004','周二',1500);

已创建 1 行。

PENG11G(sys)> insert into vc_test (pno, pname, salary) values ('000005','刘六',8500);

已创建 1 行。

PENG11G(sys)>insert into vc_test (pno, pname, salary) values ('000006','待定',null);

已创建 1 行。

PENG11G(sys)>commit;

提交完成。

PENG11G(sys)>select * from vc_test;

PNO PNAME SALARY PLE
------ ---------- ---------- ---
000001 张三 1500 PG
000002 李四 2500 SE
000003 王五 4500 SE
000004 周二 1500 PG
000005 刘六 8500 SSE
000006 待定

已选择6行。

--不能为虚拟列赋值

PENG11G(sys)> insert into vc_test (pno, pname, salary,plevel) values ('000007','测试',8500,'SSE');
insert into vc_test (pno, pname, salary,plevel) values ('000007','测试',8500,'SSE')
*
第 1 行出现错误:
ORA-54013: 不允许对虚拟列执行 INSERT 操作


--可以为虚拟列建立索引,索引类型为函数索引

PENG11G(sys)>create index ind_plevel on vc_test(plevel);

索引已创建。

PENG11G(sys)> select index_type from user_indexes where index_name = 'IND_PLEVEL';

INDEX_TYPE
---------------------------
FUNCTION-BASED NORMAL
分享到:
评论

相关推荐

    oracle数据库经典题目

    19.视图是一个表示表的数据的数据库对象,它允许用户从一个表或一组表中通过一定的查询语句建立一个“虚表”。 20.序列是一种可被多个用户使用的用于产生一系列唯一数字的数据库对象。尤其适合多用户环境中,可以...

    LuaBind 源码 (Lua增强库)

    接受一个int参数,另外一个函数接受一个float参数. 因为Lua将不区别浮点数和整形数, 所以他们都是匹配的. 因为所有的重载是被测试过的,这将总是找到最好的匹配(不是第一个匹配).这样意味着, LuaBind可以处理签名的...

    数据库原理及应用第二版第5章 视图.ppt

    视图是由基本表中的部分行和列数据组成的逻辑窗口,它并不是一个实际存储数据的实体,而是一个虚表。数据库中仅保存视图的定义,而不存储其数据,数据依旧存在于原始的基本表中。视图可以基于一个或多个基本表,...

    WPS2021快捷键.docx

    - **打开文档**: 使用`Ctrl+O`可以打开一个新的或现有的文档。 - **程序切换**: 使用`Alt+Tab`可以在不同的应用程序之间快速切换。 #### 三、视图与显示 - **显示列表**: 按`F4`键可以显示或隐藏某些类型的列表。 -...

    WPS快捷键使用大全.doc

    - **定位功能**: 若要快速跳转到文档中的特定位置,可以使用`Ctrl+G`。 - **撤销操作**: 如果不小心进行了错误的操作,可以通过`Ctrl+Z`来撤销最近的一次操作。 - **恢复操作**: 如果撤销了不该撤销的操作,则可以...

    WPS快捷键使用大全.pdf

    9. **移到下一个单词前/后**:Ctrl+→和Ctrl+←,快速移动光标。 10. **移到下一段开头/段首**:Ctrl+↓和Ctrl+↑,快速跳转段落。 导航与窗口管理: 1. **关闭程序/文档**:Alt+F4和Ctrl+W,关闭当前程序或文档...

    VC一点通—实现文件夹的缩略图显示.docx

    虚列表是一种优化的列表视图控件,它允许在实际显示数据之前不加载所有项目的数据。在创建CListView时,通过设置风格位`LVS_OWNERDATA`,可以将列表控件设置为虚列表模式。例如,在`PreCreateWindow`函数中,将列表...

    SDH原理SDH原理SDH原理SDH原理

    - **帧结构**:STM-N信号的帧结构是一个矩形块状结构,由9行×270×N列的字节组成,其中N表示信号级别,如STM-1的N=1,STM-4的N=4等。 - **组成部分**: - **段开销(SOH)**:位于每帧的前9行×9列,用于整个STM-N帧的...

    利用Realview MDK生成.bin格式的文件

    1. **新建工程**:首先,创建一个新的工程,如“Axf_To_Bin.uv2”。 2. **打开配置对话框**:在工程中,打开“Options for Target ‘Axf_To_Bin’”对话框。 3. **选择User标签页**:在对话框中,切换到“User”标签...

    9452答案(1)C++期末考试题库.docx

    友元机制允许一个类访问另一个类的私有和保护成员,增强了灵活性。 在C++中,关键字`operator`用于重载运算符,使得可以自定义操作符的行为。类的构造函数和析构函数可以被重载,以满足不同初始化和清理需求。函数...

    matlab 与数值分析实验

    - `ans`:系统缺省结果输出变量,存储最近一个未被赋值的结果。 - **数字格式控制:** - `format short`:四舍五入的浮点数显示。 - `format long`:15位浮点数显示。 - `format hex`:十六进制显示。 - `...

Global site tag (gtag.js) - Google Analytics