日期:2014-05-16 浏览次数:20475 次
以下内容摘自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 中,您不需要编写任何触发器代码。您只需添加一个虚拟列。虚拟列为您提供了灵活性,可以添加传达商业意识的列,而不增加任何复杂性或性能影响。
以下是创建该表的方法: