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;