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

SQL Oracle Discussion :

update et insert


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 36
    Par défaut update et insert
    bonjour;

    je voudrais mettre en place du code pl/SQL pour réaliser des inserts lorsque je ne trouve pas l'occurence recherchée et donc le cas échéant controler si l'occurence est toujours valide par rapport aux données en paramètres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
        BEGIN
          SELECT * INTO v_acquereur FROM ACQUEREUR
          WHERE ACQUEREUR.ORGANISME_ACQUEREUR_ENVOYE_CAP = saa_evt_obj.ORGANISME_ACQUEREUR_ENVOYE_CAP;
     
          IF v_acquereur.BANQUE_REFERENCE != saa_evt_obj.BANQUE_REFERENCE OR  v_acquereur.CODE_PAYS_ACQUEREUR != saa_evt_obj.CODE_PAYS_ACQUEREUR THEN
            UPDATE ACQUEREUR
            SET ACQUEREUR.BANQUE_REFERENCE =  saa_evt_obj.BANQUE_REFERENCE,
          ACQUEREUR.CODE_PAYS_ACQUEREUR = saa_evt_obj.CODE_PAYS_ACQUEREUR;
          END IF;
     
          EXCEPTION
          WHEN NO_DATA_FOUND THEN
            INSERT INTO ACQUEREUR
            (ORGANISME_ACQUEREUR_ENVOYE_CAP, BANQUE_REFERENCE, CODE_PAYS_ACQUEREUR)
          VALUES (saa_evt_obj.ORGANISME_ACQUEREUR_ENVOYE_CAP, saa_evt_obj.BANQUE_REFERENCE, saa_evt_obj.CODE_PAYS_ACQUEREUR);
        END ;
    je me demande si c'est bon, normalement le select leve une exception si l'instruction ne renvoie rien donc je ne fais pas l'update.
    y a a t-il une méthode plus optimisé ? un code plus clair ?

  2. #2
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 36
    Par défaut
    déja je pense que le test pour savoir s'il est nécéssaire d'updater est couteux, il faut updater à chaque fois.

  3. #3
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    pris comme ça, je pense que c'est optimisé au max (c'est pas le cout d'un test qui va peser bien lourd par rapport aux requêtes...)

    Cependant, tu ne décrit pas comment du récupère ton record saa_evt_obj. C'est peut etre avec cette action que tu peux capitaliser des traitement.

    Pour les update/insert il y a le merge qui parait-il est le plus éfficace (j'ai jamais pu le tester sur des gros volumes).

    Sinon y'a une autre méthode qui consiste à faire l'update, récupérer le SQL%ROWCOUT et faire l'insert si ce dernier est à 0.

    Mais dans le cas que tu montres, ce n'est pas le même critère dans ton select et dans ton update, donc je vois pas trop comment améliorer

  4. #4
    Membre averti
    Inscrit en
    Septembre 2005
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 36
    Par défaut
    Citation Envoyé par remi4444
    pris comme ça, je pense que c'est optimisé au max (c'est pas le cout d'un test qui va peser bien lourd par rapport aux requêtes...)

    Cependant, tu ne décrit pas comment du récupère ton record saa_evt_obj. C'est peut etre avec cette action que tu peux capitaliser des traitement.

    Pour les update/insert il y a le merge qui parait-il est le plus éfficace (j'ai jamais pu le tester sur des gros volumes).

    Sinon y'a une autre méthode qui consiste à faire l'update, récupérer le SQL%ROWCOUT et faire l'insert si ce dernier est à 0.

    Mais dans le cas que tu montres, ce n'est pas le même critère dans ton select et dans ton update, donc je vois pas trop comment améliorer
    je me corrige l'update est extrement couteux il m'a diminué mes perfs * 10
    je suis en train de tester avec les IF pour éviter l'update
    Ensuite je testerais en éliminant le SELECT avec un RETURNING sur l'update

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est normal l'UPDATE sans WHERE ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE ACQUEREUR
            SET ACQUEREUR.BANQUE_REFERENCE =  saa_evt_obj.BANQUE_REFERENCE,
          ACQUEREUR.CODE_PAYS_ACQUEREUR = saa_evt_obj.CODE_PAYS_ACQUEREUR;
    Sinon question perfs, ça veut dire quoi le diminué par 10 ?
    Combien d'enregistrements, quels temps, etc...

  6. #6
    Membre Expert
    Inscrit en
    Avril 2006
    Messages
    1 024
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 1 024
    Par défaut
    Citation Envoyé par McM
    C'est normal l'UPDATE sans WHERE ?
    ah oui j'avais pas vu!

Discussions similaires

  1. [SQL2K][BCK] erreur de syntax pour update et insert
    Par lifecraft dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/02/2006, 10h31
  2. update or insert
    Par jarod_bx dans le forum Access
    Réponses: 3
    Dernier message: 09/01/2006, 19h03
  3. sql update et insert dans la meme requete
    Par Jessicaa dans le forum Langage SQL
    Réponses: 8
    Dernier message: 14/12/2005, 15h39
  4. Réponses: 8
    Dernier message: 22/06/2005, 10h34
  5. Update ou insert avec incrément d'un champ
    Par dany13 dans le forum ASP
    Réponses: 5
    Dernier message: 15/10/2004, 12h53

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