如何在 oracle 10g 中计算列值?

use*_*vin 2 sql oracle plsql oracle10g

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
)
Run Code Online (Sandbox Code Playgroud)

因此,当我插入行时,'total_cost' 应该自动生成并插入到表中

Gor*_*off 5

10g没有这个功能。相反,使用视图:

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;
Run Code Online (Sandbox Code Playgroud)

另一种方法是让表中的列使用触发器来维护值——用于更新和插入。我建议使用视图,因为维护触发器会增加很多维护开销。

编辑(由杰森):

在 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
)
Run Code Online (Sandbox Code Playgroud)