日期:2014-05-16 浏览次数:20512 次
以下内容摘自OTN。
---------------------------------------
Acme 的数据库包含了一个名为 SALES 的表,如前所示。该表的结构如下:
| 
 SALES_ID  | 
 NUMBER  | 
| 
 CUST_ID  | 
 NUMBER  | 
| 
 SALES_AMT  | 
 NUMBER  | 
某些用户希望添加一个名为 SALE_CATEGORY 的列,以便根据销售量和当前客户来标识销售的类型:LOW、MEDIUM、HIGH 和 ULTRA。该列将帮助他们识别相应动作的记录,并将记录路由给相关人员以进行处理。以下是列值的逻辑:
| 
 如果 sale_amt 大于:  | 
 且 sale_amt 小于或等于:  | 
 则 sale_category 为  | 
| 
 0  | 
 1000  | 
 LOW  | 
| 
 10001  | 
 100000  | 
 MEDIUM  | 
| 
 100001  | 
 1000000  | 
 HIGH  | 
| 
 1000001  | 
 无限  | 
 ULTRA  | 
尽管该列是重要的业务需求,但开发团队不希望更改代码来创建必要的逻辑。当然,您可以在表中添加一个名为 sale_category 的新列,然后编写一个触发器以使用上述逻辑填充该列 — 一个相当简单的操作。但是,由于与触发器代码的上下文切换,可能会导致性能问题。
在 Oracle Database 11g 中,您不需要编写任何触发器代码。您只需添加一个虚拟列。虚拟列为您提供了灵活性,可以添加传达商业意识的列,而不增加任何复杂性或性能影响。
以下是创建该表的方法: