利用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数据上创建虚拟列和复合触发器的方法,希望这种介绍能给您带来回报!