繁体   English   中英

ORACLE SQL触发器和SUM()

[英]ORACLE SQL trigger and SUM()

我有一个表COMMANDE和一个表REGROUPE。 我有那个功能:

CREATE OR REPLACE PROCEDURE multiplicateur(a NUMBER, taxes NUMBER, c OUT NUMBER)
IS
BEGIN
    c := a * taxes ;
END multiplicateur;
/

我正在尝试使用该功能来触发一个触发器,以通过一个可以包含多个项目的命令来更新含税的总价。 我尝试了这个,但是它不想工作:

create or replace TRIGGER MAJ_PRIX_COMMANDE
AFTER INSERT OR UPDATE OR DELETE ON REGROUPE
FOR EACH ROW
DECLARE 
resultat NUMBER; 
BEGIN
UPDATE COMMANDE
SET COMMANDE.prixTotal = multiplicateur((CAST((SELECT SUM(prixRegroupe)FROM REGROUPE WHERE REGROUPE.numCommande = :NEW.numCommande)AS NUMBER)),1.15,resultat)

WHERE COMMANDE.numCommande = :NEW.numCommande;
END;

有人能帮我吗?

这个怎么样? 我是从iPhone发送的; 此代码尚未经过测试。

create or replace TRIGGER MAJ_PRIX_COMMANDE
AFTER INSERT OR UPDATE OR DELETE ON REGROUPE
FOR EACH ROW
DECLARE 
 resultat NUMBER; 
 l_groupe NUMBER; --will store sum based on numCommande
BEGIN
 --retrieve sum of prixRegroupe
 SELECT SUM(r.prixRegroupe)
   INTO l_groupe
   FROM regroupe r
  WHERE r.numCommande = :NEW.numCommande;

  --call procedure and pass the sum of priRegroupe
  multiplicateur(l_groupe, 1.15, resultat);

  --use precedures out argument to update commande
 UPDATE COMMANDE c
    SET c.prixTotal = resultat
  WHERE c.numCommande = :NEW.numCommande;
END;

此代码无效。 这将导致变异的触发错误。 在触发器内,您无法查询或修改触发器所基于的同一表,直到触发器完成执行。

ORA-04091:表名正在变异,触发器/函数可能看不到它

现在的问题是,当触发器尝试插入/更新同一表时,您正在查询regroupe表。 这是无法实现的。

您将需要找到其他方法来获取prixRegroup列的总和。 如果我想到明天要回应的话,已经太晚了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM