暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 虚拟列简单说明

原创 不吃草的牛_Nick 2023-05-19
2035

Oracle Database 11g在表中使用虚拟列。虚拟列(virtual column)是这样一种列,它由基于一个或多个实际列的表达式的计算派生,或通过计算SQL或PL/SQL函数得出。与普通的列不一样,虚拟列数据不永久存储在磁盘h.数据库在你査询虚拟列时通过动态计算其他列上的表达式或计算一个函数得出虚拟列的值。

可在DDL和DML语句中使用虚拟列,可以在虚拟列上定义索引,也可以收集关于虚拟列的统计数据。

1. 创建虚拟列
当作为CREATE TABLE语句的成分说明一个虚拟列时,使用子句GENERATED ALWAYS AS,如下所示:
CREATE TABLE emp (
empno NUM6ER(5) PRIMARY KEY,
ename VARCHAR2(15) NOT NULL,
ssn NUMBER(9),
sal NUMBER(7,2),
hrly_rate NUMBER(7,2) generated always as (sal/2080)
);

上面例子中最后一行给出虚拟列的说明。如果愿意,也可以给出可选的关键字VIRTUAL,如下所示:
CREATE TABLE emp3(
sal number (7,2),
hrly_rate number(7,2) generated always as (sal/2080)
VIRTUAL
CONSTRAINT HourlyRate CHECK (hrly_rate > 8.00)
);

上面的两个例子中,hrly_rate是虚拟列,它由计算每行的表达式sal/2080生成。你也可以通过执行ALTER TABLE语句,在已有表矛添加虚拟列,如下所示:
alter table employees ado (income as (salaiy*commission_pct));

因为没有为虚拟列说明数据类型,Oracle将根据数据库计算虚拟列的那两个列的数据类型(salary和commission_pct)自动指定一个默认数据类型。

2. 虚拟列的限制
在表中使用虚拟列存在某些限制,汇总如下:
★ 不能在索引组织表、外部表、临时表、对象或群上创建虚拟列。
★ 不能作为用户定义类型、大对象(LOB)或RAW创建虚拟列。
★ 列表达式中所有列都必须属于相同的表。
★ 列表达式必须产生一个标量值。
★ AS子句中的列表达式不能引用另一虚拟列。
★ 不能通过在更新语句的SET子句使用虚拟列来更新虚拟列。
★ 不能在虚拟列上执行删除或插入操作。



「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论