Déclencheur pour seulement changé les valeurs
Dire que nous avons 3 enregistrements dans la table: orig_tab
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 1 | AA | Street1 | 11111 |
| 2 | BB | Street2 | 22222 |
| 3 | CC | Street3 | 33333 |
---------------------------------------------
Maintenant les données sont modifiées:
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 1 | AA | Street1 | 11111 |
| 2 | BB | Street2 | 44444 |
| 3 | CC | Dtreet7 | 33333 |
---------------------------------------------
Ce que le client veut, c'est la mise à jour des dossiers et uniquement la mise à jour des colonnes (oui, je sais, ça n'a aucun sens mais ils utilisent un vieux système à partir des années 1970, et ils veulent faire de l'abattage, etc.). Ainsi, le tableau doit être comme ceci:
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 2 | | | 44444 |
| 3 | | Dtreet7 | |
---------------------------------------------
Ce que j'ai essayé:
CREATE OR REPLACE TRIGGER vr_reporting_trigger
AFTER UPDATE ON orig_tab
FOR EACH ROW
BEGIN
IF inserting THEN
INSERT INTO rep_tab(pk, name, address, code)
SELECT :new.pk, :new.name, :new.address, :new,code FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM rep_tab WHERE pk = :new.pk);
UPDATE rep_tab t SET t.name = :new.name, t.address = :new.address, t.code = :new.code
WHERE t.pk = :new.pk;
ELSIF updating THEN
IF :new.pk <> :old.pk THEN
UPDATE rep_tab t
SET t.name = :new.name, t.address = :new.address, t.code =: new.code
WHERE t.pk = :old.pk ;
END IF;
MERGE INTO rep_tab d
USING DUAL ON (d.pk = :old.pk)
WHEN MATCHED THEN
UPDATE SET d.name = :new.name, d.address = :new.address, d.code =: new.code
WHEN NOT MATCHED THEN
INSERT (d.pk,d.name, d.address, d.code) VALUES (:new.pk,:new.name, new.address, new.code);
END IF;
END;
avec cette solution, j'obtiens:
---------------------------------------------
| PK | Name | Address | Postal Code |
---------------------------------------------
| 2 | BB | Street2 | 44444 |
| 3 | CC | Dtreet7 | 33333 |
---------------------------------------------
Je sais que quelque part dans l'insérer noël à quand la mise à jour de déclaration, mais je ne peux pas comprendre comment ce père noël changé comme par mon exigence. Toute suggestion?
Merci d'avance.
OriginalL'auteur Jaanna | 2012-06-26
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin de ceci:
De La documentation d'Oracle(9i)
11gR2 documentation
Ce qui semble déclencher si la th yolumn est la partie de l'instruction de mise à JOUR. Non seulement si la valeur change.
OriginalL'auteur Florin Ghita
Déclencheur pour seulement changé les valeurs.
Comme un exemple:
OriginalL'auteur Barh