日期:2014-05-16  浏览次数:20475 次

Oracle 11g之虚拟列

以下内容摘自OTN。

---------------------------------------

Acme 的数据库包含了一个名为 SALES 的表,如前所示。该表的结构如下:

 

SALES_ID

NUMBER

CUST_ID

NUMBER

SALES_AMT

NUMBER

 

某些用户希望添加一个名为 SALE_CATEGORY 的列,以便根据销售量和当前客户来标识销售的类型:LOWMEDIUMHIGH ULTRA。该列将帮助他们识别相应动作的记录,并将记录路由给相关人员以进行处理。以下是列值的逻辑:

 

如果 sale_amt 大于:

sale_amt 小于或等于:

sale_category

0

1000

LOW

10001

100000

MEDIUM

100001

1000000

HIGH

1000001

无限

ULTRA

 

尽管该列是重要的业务需求,但开发团队不希望更改代码来创建必要的逻辑。当然,您可以在表中添加一个名为 sale_category 的新列,然后编写一个触发器以使用上述逻辑填充该列一个相当简单的操作。但是,由于与触发器代码的上下文切换,可能会导致性能问题。

Oracle Database 11g 中,您不需要编写任何触发器代码。您只需添加一个虚拟列。虚拟列为您提供了灵活性,可以添加传达商业意识的列,而不增加任何复杂性或性能影响。

以下是创建该表的方法: