我想計算我的表的一列(PRA_COEFF)(RAPPORT_VISITE)中給定字段(PRA_NUM)的值的平均值,當我添加或更改它的一行時。然後我想在另一個表(PRACTITIONER)中將此值保存到上面給出的值PRA_NUM的PRA_NUM行。如何從Oracle 10g中獲取被稱爲觸發器的表字段?
CREATE TABLE "RAPPORT_VISITE"
(
"RAP_NUM" NUMBER (10,0),
"PRA_NUM" NUMBER (10,0),
"PRA_COEFF" NUMBER (10,0),
)
CREATE TABLE "PRATICIEN"
(
"PRA_NUM" NUMBER (10,0),
"PRA_COEFCONF" NUMBER
)
觸發被稱爲添加或修改RAPPORT_VISITE表時。我試過這樣,但我無法檢索受觸發器影響的行,因此我需要讀取PRA_NUM。
create or replace TRIGGER UDPATE_PRAT_COEFCONF
AFTER INSERT or UPDATE ON RAPPORT_VISITE
DECLARE
somme NUMBER;
nb NUMBER;
moyenne NUMBER;
rapport NUMBER;
pra_id NUMBER;
BEGIN
/*SELECT MAX(RAP_NUM) INTO rapport FROM RAPPORT_VISITE; // Not want I need in case where I modify a row... */
SELECT PRA_NUM INTO pra_id FROM RAPPORT_VISITE WHERE RAP_NUM=rapport;
SELECT SUM(PRA_COEFF) INTO somme FROM RAPPORT_VISITE WHERE PRA_NUM=pra_id;
SELECT COUNT(*) INTO nb FROM RAPPORT_VISITE WHERE PRA_NUM=pra_id;
IF (nb != 0) THEN
moyenne := somme/nb;
moyenne := TRUNC (moyenne,1);
UPDATE PRATICIEN SET PRA_COEFCONF=moyenne WHERE PRA_NUM=pra_id;
END IF;
END;
好吧,但我忘了指定我必須使用Oracle 10g ...在這種情況下,您看到解決方案嗎? – cooow
在這種情況下沒有簡單的解決方案,所以一般的方法是切換到程序包/過程以插入/修改數據。但是有一個有限的解決方法(我會在答案中描述它) – vav