[英]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.