Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在oracle 10g中计算列值?_Sql_Oracle_Plsql_Oracle10g - Fatal编程技术网

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

Sql 如何在oracle 10g中计算列值?,sql,oracle,plsql,oracle10g,Sql,Oracle,Plsql,Oracle10g,因此,当我插入行时,“总成本”应自动生成并插入到表中10g没有此功能。相反,请使用以下视图: 另一种方法是让表中的列使用触发器来维护值——用于更新和插入。我建议使用视图,因为维护触发器会增加很多维护开销 编辑(杰森): 在11g中,可以在表定义中创建虚拟列 create table ord_tbl ( ord_id number(10) primary key, ord_name varchar2(20), quantity number(20), cost_per_item number(30

因此,当我插入行时,“总成本”应自动生成并插入到表中

10g没有此功能。相反,请使用以下视图: 另一种方法是让表中的列使用触发器来维护值——用于更新和插入。我建议使用视图,因为维护触发器会增加很多维护开销

编辑(杰森):

在11g中,可以在表定义中创建虚拟列

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;

正如Gordon Linoff所回答的,您可以创建一个视图。或者,您可以创建触发器并存储实际值:

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
)
存储数据的优点是,您可以更快地访问数据,并在需要时为其编制索引。缺点是存储冗余数据(可以在运行时计算),并且需要更多的存储空间


我建议首先使用视图,只有在需要此“缓存”版本以提高性能时才开始在表中存储值。

@beherenow。我很喜欢把这些信息放在标签上。谢谢你指出这一点。@gordon lineoff thnx,它工作得很好,但每次要查看总成本,我必须查看我创建的视图..如果我将计算出的值存储在主表数据库“ord_tbl”,,,jus想要knw,有什么办法吗this@user1334522_Bhavin . . . 实际上,您只需要定期使用视图而不是表。这是一种很有用的做法,尤其是当您希望在表中添加、删除或重命名列而不必更改应用程序中的查询时。我建议不要在表中添加“total_cost”,因为它只是根据行中的其他列计算出来的。此外,你可能会改变你的想法,如何计算“总成本”。
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
)
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;