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 :

Modification sur les colonnes <> 0


Sujet :

PL/SQL Oracle

  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 415
    Points : 40
    Points
    40
    Par défaut Modification sur les colonnes <> 0
    Bonjour,

    j'ai une table My!table(A,B,C,D,E,F,G)

    j'ai une procédure qui va récupérer des lignes selon quelques conditions,

    j'ai besoin d'extraire les lignes et modifier les D,E,F,G de la manière :

    Si D<>0 then set D=0
    Si E<>0 then set E=0
    Si F<>0 then set F=0
    Si G<>0 then set G=0

    Après cela, je dois récupérer le ID du la ligne qui a été modifier ou bien récupérer C de la ligné modifié.
    et finalement je dois récupérer le nombre de ligne modifiées, et si c'est possible le nom des colonnes modifiées

    merci par avance.

  2. #2
    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
    Et c'est quoi la question ? Parce que un update qui concerne les lignes pour lesquelles une modification doit être fait parce D ou E ou F ou G n'est pas 0 n'a pas l'air de poser on sait pas quoi quel problème.

  3. #3
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 415
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par mnitu Voir le message
    on sait pas quoi quel problème.
    merci pour ton retour,
    voici un exemple qui peut détailler peut être :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ---A--------B-------C---------D-------------X
    0,000      0,000   850,600	  0,000   1
    130,470	   0,00	   250,600    394,330    2
    pour la première ligne je dois mettre C à 0 et récupérer : C a été modifié pour X=1 (pour la ligne 1)
    pour la deuxième ligne je dois mettre A,C et D à 0 et récupérer : A,C,D ont été modifié pour X=2 (pour la ligne 2)

    récupérer les ancien valeurs si c'est possible.

    Merci à vous

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Apparement les conditions sont trop complexes pour la clause MERGE et comme vous voulez les anciennes valeurs et les lignes modifiées, il faudrait envisager la clause MODEL.

  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
    Vous chercher à utiliser votre base de données comme un langage de programmation.

    Posez-vous cette question : si ma table contenait 10 milliards de lignes à mettre à jour, dois-je récupérer 10 milliards de lignes avec écrit "ligne 5456456 mise à jour car A et D <> 0" ?

    Je pense que vous avez un problème logico-conceptuel avec les SGBDR.

  6. #6
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 415
    Points : 40
    Points
    40
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Posez-vous cette question : si ma table contenait 10 milliards de lignes à mettre à jour, dois-je récupérer 10 milliards de lignes avec écrit "ligne 5456456 mise à jour car A et D <> 0" ?.
    j'ai oublié de mentionner que ma requête retourne 5 ligne au pire des cas

  7. #7
    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
    Comme on le dit il y a plusieurs façon d'écorcher un chat!

    Bref dans la suite j'ai pris quelques raccourcies mais bon vu que c'est moi qui doit tout faire (pas de jeux d'essai digne de son nom de votre part)… Et bien entendu c'est juste comme ça pour le fun en attendant que vous définissez mieux votre problème.

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
     
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 
     
    SQL> 
    SQL> Create table mni_test (
      2    X    integer primary key,
      3    A    number,
      4    B    number,
      5    C    number,
      6    D    number
      7  )
      8  /
    Table created
     
    SQL> 
    SQL> Insert All
      2    Into mni_test Values (1, 0.0, 0.0,   850.600,    0.0)
      3    Into mni_test Values (2, 130.470, 0.0, 250.600, 394.330)
      4    Into mni_test Values (3, 0.0, 0.0, 0.0, 0.0)
      5  Select *
      6    From dual
      7  /
    3 rows inserted
     
    SQL> commit;
    Commit complete
     
    SQL> 
    SQL> Select systimestamp from dual
      2  /
    SYSTIMESTAMP
    -------------------------------------------------
    19/11/18 16:51:50,198000 +01:00
     
    SQL> 
    SQL> Update mni_test
      2    Set a = Least(0,a),
      3        b = Least(0,b),
      4        c = Least(0,c),
      5        d = Least(0,d)
      6  Where a > 0
      7     Or b > 0
      8     Or c > 0
      9     Or D > 0
     10  /
    2 rows updated
     
    SQL> 
    SQL> Commit
      2  /
    Commit complete
     
    SQL> 
    SQL> Select n.x,
      2         Case When n.a != a.a Then 'A modifié ancienne valeur:'||To_Char(a.a) End A_modifie,
      3         Case When n.b != a.b Then 'B modifié ancienne valeur:'||To_Char(a.b) End B_modifie,
      4         Case When n.c != a.c Then 'C modifié ancienne valeur:'||To_Char(a.c) End C_modifie,
      5         Case When n.d != a.d Then 'D modifié ancienne valeur:'||To_Char(a.d) End D_modifie
      6    From mni_test AS OF TIMESTAMP TO_TIMESTAMP('2018-11-19 16:51:49', 'YYYY-MM-DD HH24:MI:SS') a
      7    Join
      8    mni_test n
      9   On n.x = a.x
     10  Where n.a != a.a
     11     Or n.b != a.b
     12     Or n.c != a.c
     13     Or n.d != a.d
     14  /
                                          X A_MODIFIE                                                          B_MODIFIE                                                          C_MODIFIE                                                          D_MODIFIE
    --------------------------------------- ------------------------------------------------------------------ ------------------------------------------------------------------ ------------------------------------------------------------------ ------------------------------------------------------------------
                                          1                                                                                                                                       C modifié ancienne valeur:850,6                                    
                                          2 A modifié ancienne valeur:130,47                                                                                                      C modifié ancienne valeur:250,6                                    D modifié ancienne valeur:394,33
     
    SQL>

  8. #8
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2018
    Messages
    415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2018
    Messages : 415
    Points : 40
    Points
    40
    Par défaut
    merci infiniment mnitu
    problème solved grâce à toi

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 25/01/2018, 12h33
  2. [struts]: Pagination et tri sur les colonnes
    Par sleepy2002 dans le forum Struts 1
    Réponses: 3
    Dernier message: 09/07/2007, 15h16
  3. [fscanf] Travail sur les colonnes
    Par kikibrioche dans le forum MATLAB
    Réponses: 1
    Dernier message: 25/10/2006, 10h15

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