Bonjour,
Je suis entrain de développer une procédure PL/SQL chargée d’insérer/mettre à jour des données en base. Je cherche un moyen d’optimiser ma procédure.
Contexte :
J’utilise Oracle 8i.
J’ai une table A et une table B (même structure).
Les données de la table A doivent être insérées dans B si elles n’existent pas, sinon elles doivent être mises à jour.
Actuellement j’utilise 2 curseurs qui me retournent les lignes à insérer et les lignes à mettre à jour (via un NOT IN pour le premier et une jointure pour le second)
Ensuite j’utilise du sql dynamique dans ma procédure pour exécuter mes insert/update. Je gère un bloc d’exception dans mes 2 boucles FOR (de maniere a ce que le traitement ne s’arrete pas à la premiere exception).
Voilà où j’en suis
J’ai pris connaissance de la commande FORALL qui permet d’envoyer tous mes ordres DML en une fois mais cette commande me pose 1 problème :
Comment gérer le fait que tous mes ordres DML soient exécutés même si certains sont rejetés par Oracle (du genre doublons de PK…) ??
De plus, suis-je obligé de gérer une collection pour chaque attribut de mes tables ?? Sachant que je n’insert/met a jour qu’une partie de tous les champs.
Ya-t-il un autre moyen de faire??
Merci d’avance pour vos réponses.
Pascal.
Partager