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

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

1。虚拟列

oralce虚拟柱解决了很多需要通过触发器或使用,它需要计算和统计通过代码以前的信息。在过去,每当其他列数,新列被选择的统计报表添加新的列生成。执行效率很低,和查询的SQL语句是漫长和复杂的,因此很容易犯错误。它严重降低了开发效率和程序的执行,Oracle虚拟列的引入解决了这个问题。

也有在Oracle虚拟列的一些问题。插入talbe_name值()不能使用。声明,包含虚拟列的表中添加数据时,需要插入语句必须写出表中栏目名称添加,插入table_name(表,清单,…听说)的名字不能出现在虚拟的列名称,否则会提示错误。

创建虚拟列的示例如下所示:


创建表的销售



sales_id数,

cust_id数,

sales_amt数,

sale_catery VARCHAR2(6) / *虚拟名称和数据类型。

生成总是



当then'low'sales_amt 10000

当sales_amt > 10000和sales_amt <= 100000 then'medium

当sales_amt > 100000和sales_amt <= 1000000 then'high'else'ultra结束

虚拟)列值函数*

);



虚拟列被指定为总是生成的,这意味着列值是在运行时生成的,而不是作为表的一部分生成的。

二、复合触发器

一个复合触发器实际上是四个不同的触发器定义为一个整体。例如,UPDATE复合触发器在语句之前、行之前、语句后和行中组合成复合触发器。这是一个单独的代码片段,因此可以像其他任何单一的SQL SQL代码那样传递变量。

让我们举一个例子来解释。注:表sales_log。这与创建销售表相同。


创建触发器tri_sales

为sales_amt销售更新

复合触发

型ty_sales_log是sales_log %ROWTYPE表

指数pls_integer;

coll_sales_log ty_sales_log;

CTR pls_integer:= 0;

在语句

开始

dbms_output.put_line(声明之前);

语句结束;

每行之前

开始

Dbms_output.put_line ('In before each Row');

每行结束;

每行之后

开始

CTR = 1;

dbms_output.put_line(在之后的每一行。sales_amt| |:新。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;

每行结束;

后声明

开始

dbms_output.put_line(声明后);

该计数器在1。coll_sales_log.count()

插入sales_log(sales_id,cust_id,sales_amt)

值(coll_sales_log(计数器)。sales_id,coll_sales_log(计数器)。cust_id,coll_sales_log(计数器)。sales_amt);

结束语句插入sales_log后; / *不能使用价值

(coll_sales_log(计数器)); / /添加

最后tri_sales;



上述实例包含4种不同的触发形式,它们是独立执行的。

应当指出的是,在sales_log表虚拟列,这是不能够使用插入sales_log值(coll_sales_log(计数器))。直接添加操作,我们需要指出表中的列名,否则会出错。

介绍了在oracle数据上创建虚拟列和复合触发器的方法,希望这种介绍能给您带来回报!