簡體   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