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

Oracle Discussion :

Update dépendant de valeurs en table


Sujet :

Oracle

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 97
    Points
    97
    Par défaut Update dépendant de valeurs en table
    J'ai un soucis avec une requête d'update parce que les valeurs à insérer dépendent des valeurs déjà présentes:
    Je dispose de valeurs à ventiler sur certaines lignes d'une table, au prorata des valeurs déjà présentes dans cette tables.

    Je suppose que c'est un problème classique et j'utilise une procédure PL/SQL donc on peut 'tout' utiliser, est ce que quelqu'un sait comment faire ça
    proprement?

    Merci d'avance,

    LDPDC

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 453
    Points : 18 394
    Points
    18 394
    Par défaut
    Est-il possible que vous soyez plus précis, avec des structures et un exemple sans oublier votre version !

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Points : 503
    Points
    503
    Par défaut
    Dit comme ça, je ne vois pas le problème: vous récupérez les valeurs de la table, vous les traitez, et vous mettez à jour.
    Plus de précisions sont nécessaires.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par GoLDoZ Voir le message
    Dit comme ça, je ne vois pas le problème: vous récupérez les valeurs de la table, vous les traitez, et vous mettez à jour.
    Plus de précisions sont nécessaires.
    Je précise: il s'agit d'un système de commandes. Mon problème se situe dans la possible annulation de certain paiements. Je peux obtenir la somme à soustraire depuis la table à updater, et ce pour chaque ligne. Par contre il faut les stocker avant de commencer l'opération parce que cette valeur dépend de la valeur de toutes les lignes de la table: si je la calcule pour chaque ligne à la volée, il y a un problème avec les lignes déjà updatées. Ma question se résume donc à: comment puis-je stocker un tableau d'informations concernant des lignes et récupérer ces informations pour chaque ligne, de manière simple et éfficace?

  5. #5
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    si je la calcule pour chaque ligne à la volée, il y a un problème avec les lignes déjà updatées
    Si celà est fait une une seule requête, alors pas de problème. Le SGBD se charge de la consistence (les données sont vues telles qu'elles étaient au démarage de la requête)
    Sinon, peut être copier les données dans une table temporaire au début.
    Cordialement,
    Franck.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 97
    Points
    97
    Par défaut
    Citation Envoyé par pachot Voir le message
    Bonjour,

    Si celà est fait une une seule requête, alors pas de problème. Le SGBD se charge de la consistence (les données sont vues telles qu'elles étaient au démarage de la requête)
    Sinon, peut être copier les données dans une table temporaire au début.
    Cordialement,
    Franck.
    Je savais pas du tout ça! J'aurais du essayer. Merci beaucoup.

  7. #7
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Points : 6 446
    Points
    6 446
    Billets dans le blog
    1
    Par défaut
    Je te donne un exemple:
    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
    SQL> select * from test;
     
             N
    ----------
             1
             1
             1
             1
             1
     
    SQL> update test set n=(select sum(n) from test);
     
    5 rows updated.
     
    SQL> select * from test;
     
             N
    ----------
             5
             5
             5
             5
             5
    Imagine si ce n'était pas le cas: le résultat final dépendrait de l'ordre où oracle choisit de traiter les enregistrements.

    C'est la force de SQL: c'est un langage ensembliste. Il travaille sur un ensemble de données.

    Cordialement,
    Franck.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 01/02/2013, 17h05
  2. Réponses: 2
    Dernier message: 01/02/2013, 16h50
  3. Update dont la valeur provient de la meme table
    Par maxos75 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 07/11/2008, 15h33
  4. Réponses: 0
    Dernier message: 06/02/2008, 18h09
  5. Réponses: 7
    Dernier message: 17/10/2006, 17h32

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