我想计算我的表的一列(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