Le 2nd curseur utilise la variable rec, remplie par le résultat du 1er curseur.
Il faut peut-être que tu fasses un OPEN / FETCH du 2ème curseur juste avant de regarder %NOTFOUND.
Et enfin, je comprends pas trrop ta logique ! Quand le code n'est pas trouvé dans type_flux, tu mets à jours TOUS les libellés de type_flux !!!
J'imagine que tu veux mettre à jour le libellé dans type_flux, à code égal, trouvé dans tmp_type_flux.
Voici un moyen de le faire, plus simple :
Code :
- DECLARE
- numberOfRowsMissing INTEGER;
- BEGIN
- -- Verification de la coherence des donnees entre tmp_type_flux et type_flux
- SELECT COUNT(*)
- INTO numberOfRowsMissing
- FROM tmp_type_flux ttf
- WHERE NOT EXISTS (SELECT 1 FROM type_flux tf WHERE tf.code = ttf.code);
- IF (numberOfRowsMissing > 0) THEN
- RAISE_APPLICATION_ERROR(-20000, 'La table tmp_type_flux contient ' || numberOfRowsMissing || ' lignes qui n'existent pas dans type_flux');
- END IF;
- -- Mise à jour de type_flux
- FOR r IN (
- SELECT code, libelle
- FROM tmp_type_flux
- )
- LOOP
- UPDATE type_flux
- SET libelle = r.libelle
- WHERE code = r.code;
- END LOOP;
- END;
|
edit : si tu veux plutôt sortir un message d'erreur (dbms_output) par ligne manquant, il faut faire le COUNT dans la boucle plutôt, voire faire l'UPDATE et récupérer le nombre de lignes affectées (il me semble qu'on peut récupérer l'info).