• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >oracle > Oracle数据创建虚拟列和复合触发器的方法

Oracle数据创建虚拟列和复合触发器的方法

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了oracle触发器,oracle触发器实例,oracle触发器语法,oracle触发器的作用,oracle创建触发器等相关知识,希望本文的分享对您有所帮助

本文我们主要介绍Oracle数据库的虚拟列和复合触发器方面的相关知识,包括虚拟列和复合触发器的创建等,并给出了创建示例,接下来就让我们来一起了解这一过程吧。

一、虚拟列

Oralce 的虚拟列解决了以前很多需要使用触发器或者需要通过代码进行计算统计才能产生的数据信息。以前每次对其他的列进行统计,产生新列的时候都是采用在select 语句中通过统计计算增加新列的方法,执行效率很低,而且由于使查询SQL语句变得冗长、复杂很容易出错。严重的降低了开发效率和程序的执行效率。Oralce虚拟列的引入解决了这个问题。

Oralce 的虚拟列也有一些问题。不能使用insert into talbe_name values ().语句,在向含有虚拟列的表中添加数据时,要求insert语句的必须把添加的表的列名写出来。insert into table_name (list1,list2,...listend)列名中不能出现虚拟列名,否则会提示错误。

创建虚拟列的实例如下:

create table sales 
 
( 
 
sales_id number, 
 
cust_id number, 
 
sales_amt number, 
 
sale_category varchar2(6) /* 虚拟列名及数据类型*/ 
 
generated always as 
 
( 
 
case when sales_amt <= 10000 then 'LOW' 
 
when sales_amt > 10000 and sales_amt <= 100000 then 'MEDIUM' 
 
when sales_amt > 100000 and sales_amt <= 1000000 then 'HIGH' else 'ULTRA' end 
 
) virtual /*虚拟列值函数内容*/ 
 
); 
</div>

虚拟列被指定为“generated always as”,这意味着,列值在运行时生成,而非作为表的一部分进行存储。该子句的后面是在详细的 CASE 语句中计算值的方法。最后,指定了“virtual”以加强这是一个虚拟列的事实。

二、复合触发器

复合触发器实际上是作为一个整体定义的四个不同的触发器。例如,UPDATE 复合触发器将 before statement、before row、after statement 和 after row 都合并到一个复合触发器中。这是一个单一代码片段,因此您可以像任何其他单一 PL/SQL 代码一样来传递变量。

下面我们来引用一个示例,以帮助说明。注:创建了一个与sales表相同的表sales_log.

create or replace trigger tri_sales 
 
for update of sales_amt on SALES 
 
compound trigger 
 
type ty_sales_log is table of sales_log%rowtype 
 
index by pls_integer; 
 
coll_sales_log ty_sales_log; 
 
ctr pls_integer:=0; 
 
before statement is 
 
begin 
 
dbms_output.put_line('in before statement'); 
 
end before statement; 
 
before each row is 
 
begin 
 
dbms_output.put_line('in before each row'); 
 
end before each row; 
 
after each row is 
 
begin 
 
ctr := ctr+1; 
 
dbms_output.put_line('in after each row.sales_amt'||:new.sales_amt); 
 
coll_sales_log(ctr).sales_id := :old.sales_id; 
 
coll_sales_log(ctr).cust_id := :old.cust_id; 
 
coll_sales_log(ctr).sales_amt := :new.sales_amt; 
 
end after each row; 
 
after statement is 
 
begin 
 
dbms_output.put_line('in after statement'); 
 
forall counter in 1..coll_sales_log.count() 
 
insert into sales_log(sales_id,cust_id,sales_amt) 
 
values (coll_sales_log(counter).sales_id,coll_sales_log(counter).cust_id,coll_sales_log(counter).sales_amt); 
 
end after statement;    /* 不能使用Insert into sales_log values 
 
(coll_sales_log(counter));添加*/ 
 
end tri_sales; 
</div>

上面实例包含了4个不同触发形式,它们之间是独立的执行的。

需要注意的是:sales_log 表中有虚拟列是不能使用Insert into sales_log  values  (coll_sales_log(counter));直接进行添加操作的,我们需要标明表中的列名。否则会出现错误。

关于Oracle数据创建虚拟列和复合触发器的方法就介绍到这里了,希望本次的介绍能够对您有所收获!

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Oracle触发器实例代码
  • Oracle触发器表发生了变化 触发器不能读它的解决方法(必看)
  • Oracle使用触发器和mysql中使用触发器的案例比较
  • Oracle触发器trigger详解
  • Oracle触发器用法实例详解
  • Oracle数据创建虚拟列和复合触发器的方法
  • Oracle实现分页查询的SQL语法汇总
  • Oracle并行操作之并行查询实例解析
  • oracle监控某表变动触发器例子(监控增,删,改)
  • [Oracle] 如何使用触发器实现IP限制用户登录

相关文章

  • 2017-05-11Oracle跨数据库查询并插入实现原理及代码
  • 2017-05-11Oracle 当前用户下所有表的记录总数
  • 2017-05-11全面解析Oracle Procedure 基本语法
  • 2017-05-11Oracle Decode()函数使用技巧分享
  • 2017-05-11利用PL/SQL从Oracle数据库导出和导入数据
  • 2017-05-11Oracle 数据库管理脚本命名规范
  • 2017-05-11Oracle 11g2的监听器配置教程
  • 2017-05-11Oracle数据库技术(37)
  • 2017-05-11Oracle数据库设置任务计划备份一周的备份记录
  • 2017-05-11ORACLE时间函数(SYSDATE)深入理解

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • Oracle批量执行sql语句之禁用所有表的外键
    • 解析oracle对select加锁的方法以及锁的查询
    • Oracle 8i在P4上的安装
    • 如何确定Oracle数据库表重复的记录
    • ORCLE 表中列的修改
    • Oracle数据库中的基本建库操作详解
    • oracle数据库tns配置方法详解
    • 探讨Oracle中的&号问题
    • ORACLE常见错误代码的分析与解决(一)
    • Oracle 数据表分区的策略

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有