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