create table ord_tbl
(
ord_id number(10) primary key,
ord_name varchar2(20),
quantity number(20),
cost_per_item number(30),
total_cost number(30)--This colm shud be (quantity*cost_per_item),
ord_date date
)
因此,当我插入行时,'total_cost' 应该会自动生成并插入到表中
create table ord_tbl
(
ord_id number(10) primary key,
ord_name varchar2(20),
quantity number(20),
cost_per_item number(30),
ord_date date
);
create view vw_ord_tbl as
select ord_id, ord_name, quantity, cost_perId, (quantity*cost_per_item) as total_cost, ord_date
from ord_tbl;
另一种方法是让表中的列使用触发器来维护值 - 用于更新和插入。我建议使用视图,因为维护触发器会增加大量维护开销。
编辑(杰森):
在 11g 中,您可以在表定义中创建一个虚拟列。
create table ord_tbl (
ord_id number(10) primary key,
ord_name varchar2(20),
quantity number(20),
cost_per_item number(30),
total_cost as (quantity*cost_per_item),
ord_date date
)
就像 Gordon Linoff 回答的那样,您可以创建一个视图。或者,您可以创建触发器并存储实际值:
create trigger tiua_ord_tbl
on ord_tbl after insert or update
for each row
begin
:new.total_cost := :new.quantity * :new.cost_per_item;
end;
存储数据的优点是您可以更快地访问它并在需要时对其进行索引。缺点是存储了冗余数据(可以在运行时计算),需要更多的存储空间。
我建议首先使用视图,并且仅当您需要此“缓存”版本以提高性能时才开始将值存储在表中。