- 浏览: 60996 次
- 性别:
- 来自: 深圳
文章分类
最新评论
可以不需要触发器的情况下,使用数据。实际中可以有一些特殊用途
网上的一个例子:
虚拟列为您提供了灵活性,可以添加传达商业规则的列,而不增加任何复杂性或性能影响。
大大减轻了开发的工作量,但在建模方面需要增加工作量。
--创建一个测试表
其中包括员工编号(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
网上的一个例子:
虚拟列为您提供了灵活性,可以添加传达商业规则的列,而不增加任何复杂性或性能影响。
大大减轻了开发的工作量,但在建模方面需要增加工作量。
--创建一个测试表
其中包括员工编号(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
发表评论
-
oracle11g提示服务不可用
2014-09-26 17:36 571今天遇到一个问题,本地1521端口启用,但远程不能访问 修改监 ... -
手工用户创建,老是记不住,记录
2014-09-18 13:53 318Oracle创建表空间、创建用户以及授权、查看权限 创建临 ... -
gdul
2014-08-15 15:16 469一直想自己也写个dul工具,无奈理解得不够深入 几天前看到别人 ... -
SQL调优
2014-06-20 14:14 379网上看到如下sql: 留一个线索在此 select /*+ ... -
表闪回
2014-06-19 16:13 330使用delete删除数据的情况,如果是truncate只能用数 ... -
外键约束
2014-06-19 16:02 389删除一个表时,提示有外键约束,ORA-02292: 违反完整约 ... -
get_ddl使用
2014-05-19 16:45 422查看oracle中表定义等,需要使用dbms_metadata ... -
PL/SQL语法
2014-05-09 11:38 377今天写plsql,很久没写了,很简单的,也不想参看以前写的,怎 ... -
归档日志满的处理
2014-05-04 10:07 750只是一个记录贴,方便查阅。完全没有新意 归档日志一般需要保留 ... -
数据的导出导入
2013-12-30 12:41 354异构数据库之间数据交换,主要使用txt文本文件 以下记录一个工 ... -
exp增量
2013-12-17 17:09 343很久没有写文章了,今天遇到一个老问题,exp增量备份 记 ... -
查找oracle的操作日志
2013-12-17 16:48 551今天程序有些功能不能用了,查了一下,发现某些表对象删除了 ... -
数结构的查询
2013-09-27 18:33 0很早之前就使用过该功能,每次都记不住,每次都要搜索 索性记录一 ... -
面试中的SQL
2013-09-27 12:07 452虽然有些时间没有面试过了 在我的印象中,sql中行列转换的问题 ... -
oracle SQL特性使用
2013-09-27 11:25 378oracle分析函数 统计记录中类似1/222这样的记录 se ... -
oracle内部原理
2013-09-26 11:17 951总是以为对oracle很了解,已经使用了好多年,基本是增、删、 ... -
oracle跟踪程序执行的SQL
2013-09-24 15:34 1104专门记录一下,对于系统调优很重要 1.oracle的10046 ... -
ORA-01555处理
2013-09-22 16:44 590有时表太大,导出时出现1555错误,可以采用分段方式处理。 以 ... -
BLOB字段操作
2013-09-18 10:00 885置为空或NULL update blob_test set b ... -
统计表的大小
2013-09-11 17:29 360统计用户表的大小: SELECT * FROM ( SEL ...
相关推荐
19.视图是一个表示表的数据的数据库对象,它允许用户从一个表或一组表中通过一定的查询语句建立一个“虚表”。 20.序列是一种可被多个用户使用的用于产生一系列唯一数字的数据库对象。尤其适合多用户环境中,可以...
接受一个int参数,另外一个函数接受一个float参数. 因为Lua将不区别浮点数和整形数, 所以他们都是匹配的. 因为所有的重载是被测试过的,这将总是找到最好的匹配(不是第一个匹配).这样意味着, LuaBind可以处理签名的...
视图是由基本表中的部分行和列数据组成的逻辑窗口,它并不是一个实际存储数据的实体,而是一个虚表。数据库中仅保存视图的定义,而不存储其数据,数据依旧存在于原始的基本表中。视图可以基于一个或多个基本表,...
- **打开文档**: 使用`Ctrl+O`可以打开一个新的或现有的文档。 - **程序切换**: 使用`Alt+Tab`可以在不同的应用程序之间快速切换。 #### 三、视图与显示 - **显示列表**: 按`F4`键可以显示或隐藏某些类型的列表。 -...
- **定位功能**: 若要快速跳转到文档中的特定位置,可以使用`Ctrl+G`。 - **撤销操作**: 如果不小心进行了错误的操作,可以通过`Ctrl+Z`来撤销最近的一次操作。 - **恢复操作**: 如果撤销了不该撤销的操作,则可以...
9. **移到下一个单词前/后**:Ctrl+→和Ctrl+←,快速移动光标。 10. **移到下一段开头/段首**:Ctrl+↓和Ctrl+↑,快速跳转段落。 导航与窗口管理: 1. **关闭程序/文档**:Alt+F4和Ctrl+W,关闭当前程序或文档...
虚列表是一种优化的列表视图控件,它允许在实际显示数据之前不加载所有项目的数据。在创建CListView时,通过设置风格位`LVS_OWNERDATA`,可以将列表控件设置为虚列表模式。例如,在`PreCreateWindow`函数中,将列表...
- **帧结构**:STM-N信号的帧结构是一个矩形块状结构,由9行×270×N列的字节组成,其中N表示信号级别,如STM-1的N=1,STM-4的N=4等。 - **组成部分**: - **段开销(SOH)**:位于每帧的前9行×9列,用于整个STM-N帧的...
1. **新建工程**:首先,创建一个新的工程,如“Axf_To_Bin.uv2”。 2. **打开配置对话框**:在工程中,打开“Options for Target ‘Axf_To_Bin’”对话框。 3. **选择User标签页**:在对话框中,切换到“User”标签...
友元机制允许一个类访问另一个类的私有和保护成员,增强了灵活性。 在C++中,关键字`operator`用于重载运算符,使得可以自定义操作符的行为。类的构造函数和析构函数可以被重载,以满足不同初始化和清理需求。函数...
- `ans`:系统缺省结果输出变量,存储最近一个未被赋值的结果。 - **数字格式控制:** - `format short`:四舍五入的浮点数显示。 - `format long`:15位浮点数显示。 - `format hex`:十六进制显示。 - `...