Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.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
oracle中的加减列_Oracle_Plsql_Triggers_Oracle11g - Fatal编程技术网

oracle中的加减列

oracle中的加减列,oracle,plsql,triggers,oracle11g,Oracle,Plsql,Triggers,Oracle11g,我有表存货 "INVENTORY_CODE" VARCHAR2(20) NOT NULL ENABLE "ITEM_CODE" VARCHAR2(20) NOT NULL ENABLE "WAREHOUSE_CODE" VARCHAR2(20) "CON_TON" NUMBER(38,5) "IN_Q_TON" NUMBER(38,5) "OR_Q_TON" NUMBER(38,5) "RES_TON" NUMBER(38

我有表
存货

"INVENTORY_CODE" VARCHAR2(20) NOT NULL ENABLE 
"ITEM_CODE"      VARCHAR2(20) NOT NULL ENABLE 
"WAREHOUSE_CODE" VARCHAR2(20) 
"CON_TON"        NUMBER(38,5) 
"IN_Q_TON"       NUMBER(38,5) 
"OR_Q_TON"       NUMBER(38,5) 
"RES_TON"        NUMBER(38,5) 
"RET_TON"        NUMBER(38,5)  
"ST_INV"         NUMBER(38,5)
和另一个表
库存\仓库

"CODE" VARCHAR2(20) NOT NULL ENABLE 
"ITEM_CODE" VARCHAR2(20) NOT NULL ENABLE 
"QUANTITY_AV_TON" NUMBER(38,5) 
"QUANTITY_AV_REAM" NUMBER(38,5) 
"QUANTITY_AV_SHEET" NUMBER(38,5)
我想触发一个触发器来计算
数量\u AV\u TON

作为

我创造了这个触发器,但它不起作用

create or replace trigger QUANTITY_TON
AFTER insert or update or delete on INVENTORY
for each row
begin
  UPDATE INVENTORY_WAREHOUSE
     SET QUANTITY_AV_TON =
         select (IN_Q_TON + RES_TON + RET_TON + ST_INV - CON_TON -OR_Q_TON)
         from inventory
         where INVENTORY.item_code = INVENTORY_WAREHOUSE.item_code;
end;

如果要从正在处理的触发器中的行的上下文值执行计算,则可以使用触发器从其他表中计算
IN_Q_TON
RES_TON
RET_TON
的值。这通常通过使用“:NEW”变量来完成。我已编辑触发器,但无法运行它,请尝试。请阅读


我建议使用快速刷新物化视图。那么,什么不起作用呢?PL/SQL:ORA-00936:缺少表达式编译失败,PL/SQL:SQL语句ignoredYour子查询需要用括号括起来,但如果您尝试查询触发器所针对的表,则可能会出现变异表错误,同时触发触发器的同时更改将导致争用问题,这将导致总数关闭(如果它起作用的话)。触发器不是解决这个问题的好方法。为什么不使用视图实时计算总计,或者如果计算成本很高,为什么不使用实体化视图?实体化视图是否会自动计算值,或者我必须编写一个代码来调用它?插入、更新和删除需要单独计算:旧值-插入时不存在旧值,并且只存在于删除帐户中?是的,我只考虑插入。
create or replace trigger QUANTITY_TON
AFTER insert or update or delete on INVENTORY
for each row
begin
  UPDATE INVENTORY_WAREHOUSE
     SET QUANTITY_AV_TON =
         select (IN_Q_TON + RES_TON + RET_TON + ST_INV - CON_TON -OR_Q_TON)
         from inventory
         where INVENTORY.item_code = INVENTORY_WAREHOUSE.item_code;
end;
CREATE OR REPLACE TRIGGER QUANTITY_TON
   AFTER INSERT OR UPDATE OR DELETE
   ON INVENTORY
   FOR EACH ROW
BEGIN
   UPDATE INVENTORY_WAREHOUSE
      SET QUANTITY_AV_TON =   :new.IN_Q_TON
                            + :new.RES_TON
                            + :new.RET_TON
                            + :new.ST_INV
                            - :new.CON_TON
                            - :new.OR_Q_TON
   WHERE INVENTORY_WAREHOUSE.ITEM_CODE = :new.ITEM_CODE;

END;