IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

annuler une insertion dans un trigger sans déclencher d'exception


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut annuler une insertion dans un trigger sans déclencher d'exception
    Bonjour,
    j'ai une table qui contient des lignes pour lesquelles je gère des périodes.
    Exemple :
    20090203 -> 20091223 : valeur = 3
    20100102 -> 20110718 : valeur = 5

    Je ne dois jamais avoir de chevauchement. Pour être sûr d'avoir une base cohérente, je souhaite faire un trigger sur le INSERT dans cette table.

    Quand j'ajoute une période :
    1. si il y a déjà des périodes incluses dans celles-ci, je les supprimer
    2. si cette période est englobée par une période déjà existante, soit la valeur est la même et je fais un merge, soit la valeur est différente et je scinde l'ancienne période en deux parties
    3. s'il y a une période qui se termine après le début de la période à insérer, je raccourcis sa date de fin (ou réalise un merge si même valeur)
    4. s'il y a une période qui commence avant la fin de la période à insérer, je rallonge sa date de début (ou réalise un merge si même valeur)

    Mon problème vient du point 2. dans le cas où on ait la même valeur. Dans l'idéal, je voudrais annuler l'insertion de la nouvelle ligne, puisque la valeur est déjà présente. Mais je ne veux pas lever d'exception car il n'y a aucune erreur. Y a-t-il un moyen de faire ça?

    Sinon, si quelqu'un a une idée plus simple ou un code déjà fait pour cette histoire de période à gérer, je suis preneur aussi

  2. #2
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Voir cette discussion AskTom pour éviter le chevauchement de données.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    Je vais lire ça, merci

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 136
    Points : 112
    Points
    112
    Par défaut
    En fait ça ne fait pas exactement ce que je veux, ça SIGNALE qu'il y a une erreur et empêche l'insertion des données, alors que moi je veux justement corriger les données existantes pour permettre l'insertion.

    Cela dit c'est assez intéressant et ça me fait me poser pas mal de questions Notamment :
    - dans leur algo, ils mémorisent l'ensemble des rowid insérés, puis les traitent en bloc après l'insertion. Quelle est la différence avec un simple "on each row"?? (EDIT => après un survol d'un lien de l'article, c'est pour éviter des conflits sur des tables en cours de lecture...)
    - si on lève une exception dans le "after insert", l'insertion sera rollbackée?
    - je n'ai pas pigé l'utilité de dbms_lock (mais je vais regarder plus en détail la discussion associée, c'est peut-être expliqué)

Discussions similaires

  1. Annuler une insertion dans une table sur condition
    Par EFCAugure dans le forum DB2
    Réponses: 2
    Dernier message: 03/02/2014, 09h55
  2. Réponses: 2
    Dernier message: 21/11/2013, 14h20
  3. Annuler une requète depuis un IDispatchMessageInspector sans passer dans la méthode ensuite
    Par fragmonster dans le forum Windows Communication Foundation
    Réponses: 2
    Dernier message: 05/07/2011, 12h55
  4. Annuler une insertion dans un Trigger
    Par dreamanoir dans le forum Oracle
    Réponses: 2
    Dernier message: 10/01/2005, 13h04
  5. Réponses: 4
    Dernier message: 18/10/2004, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo