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 :

Utilisation de l'opérateur MINUS avec valeur à NULL


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2009
    Messages : 85
    Points : 62
    Points
    62
    Par défaut Utilisation de l'opérateur MINUS avec valeur à NULL
    Bonjour,

    J'utilise Oracle 11.2.0.1.0. J'ai construit une procédure stockée qui ressemble à ceci :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    PROCEDURE insertion_ligne
     
    AS
     
    BEGIN
     
    FOR INS IN (select q,w,e
                    from table_a 
                    minus
                    select q,w,e
                    from table_b) loop
     
    insert into table_b(q,w,e) values (ins.q,ins.w,ins.e);
     
     
    END LOOP;
     
    EXCEPTION 
     
    WHEN OTHERS
     
    ROLLBACK;
    RAISE;
     
    END;
    Si q et w prennent la valeur NULL pour une ligne, par exemple, l'exécution de la procédure stockée plusieurs fois va insérer autant de fois cette ligne. Est-ce qu'il y a une façon élégante de gérer ce cas pour que plusieurs exécutions ne produisent qu'une seule entrée dans table_b?

    Merci.

  2. #2
    McM
    McM est déconnecté
    Expert éminent

    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
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    Je n'ai pas ce problème. Peux-tu donner un jeu d'essai ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WITH table_a AS (SELECT NULL q, NULL w, 1 e FROM dual),
    table_b AS (SELECT NULL q, NULL w, 1 e FROM dual)
    SELECT  q,w,e FROM table_a
    MINUS
    SELECT q,w,e FROM table_b
     
    No rows returned
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 054
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 054
    Points : 9 394
    Points
    9 394
    Par défaut
    Bonsoir,
    Voici une solution , pas forcément élégante, mais on fait ce qu'on peut !

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    PROCEDURE insertion_ligne
     
    AS
     
    BEGIN
     
    FOR INS IN (select nvl(q,'#'),nvl(w, '#'),nvl(e, '#')
                    from table_a 
                    minus
                    select nvl(q,'#'),nvl(w, '#'),nvl(e, '#')
                    from table_b) loop
     
    insert into table_b(q,w,e) values ( decode ( ins.q, '#', null, ins.q )  ,  decode ( ins.w, '#', null, ins.w )   ,  decode ( ins.e, '#', null, ins.e ) );
     
     
    END LOOP;
     
    EXCEPTION 
     
    WHEN OTHERS
     
    ROLLBACK;
    RAISE;
     
    END;
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par lcaya Voir le message
    Bonjour,

    J'utilise Oracle 11.2.0.1.0. J'ai construit une procédure stockée qui ressemble à ceci :

    ...
    Insert dans une boucle c'est mauvais. When Others Rollback c'est mauvais.

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Voici une solution , pas forcément élégante, mais on fait ce qu'on peut !
    C'est bien de proposer des solutions, encore faut-il qu'elles résolvent un problème.
    Les nulls sont bien gérés dans le minus, l'exemple de McM va dans ce sens.

    Votre solution malheureusement, c'est du code fastidieux à écrire, à relire et totalement inutile.

Discussions similaires

  1. [VxiR2] Utilisation de l'opérateur où avec une valeur = -1
    Par bastoonet dans le forum Deski
    Réponses: 4
    Dernier message: 29/04/2009, 22h36
  2. Calcul de stock avec valeure null
    Par nideux dans le forum Access
    Réponses: 3
    Dernier message: 02/12/2005, 11h10
  3. locate avec valeurs nulles
    Par lol_adele dans le forum Bases de données
    Réponses: 13
    Dernier message: 17/10/2005, 13h31
  4. [JDBC] retour de requete sql avec valeur NULL
    Par maxxou dans le forum JDBC
    Réponses: 3
    Dernier message: 13/09/2004, 14h40
  5. Pb requete avec valeurs nulles
    Par James85 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 12/04/2004, 10h20

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