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 :

Mise à jour dans une requête (curseur)


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 Mise à jour dans une requête (curseur)
    Bonjour tout le monde, ça fait bien longtemps...

    je reviens vers vous en sollicitant vos aides

    j'ai une select qui me retroune ce qui suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AGENCE,CLIENT,MONTANT_ASSURANCE,COMMISSION,SOLDE_CLIENT
    j'ai besoin de faire une requête qui met à jour le à chaque fois selon la formule suivante :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SOLDE_CLIENT = SOLDE_CLIENT - (MONTANT_ASSURANCE+COMMISSION);
    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    AGENCE,CLIENT,MONTANT_ASSURANCE,COMMISSION,SOLDE_CLIENT
    01   A002    2000     200      58200 << SOLDE_CLIENT initiale
    01   A002    1800     200      54000
    01   A002    900       100      52000
    01   A003    900       100      8000 << autre client
    01   A003    800       200      7000
    .
    .
    .
    merci d'avance

  2. #2
    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
    ma question est aussi difficile? ou ambiguë ?

  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
    je reformule ma question, espérant que ça va vous éclaircir l'idée.

    ici je cherche à trouvé le SOLDE du client par rapport à la ligne précédente comme suit :

    SOLDE_CLIENT =
    SOLDE_CLIENT - (MONTANT_ASSURANCE+COMMISSION) : de la ligne précédente


    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    AGENCE, CLIENT, MONTANT_ASSURANCE,  COMMISSION,   SOLDE_CLIENT
    01        A002       2000     200           58200 << SOLDE_CLIENT initiale 
    01        A002       1800     200           54000
    01        A002       900       100           52000
    01        A003       900       100           8000 << autre client
    01        A003       800       200           7000

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Première question :
    Comment identifie-t-on la ligne précédente ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  5. #5
    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
    étant donné que les lignes sont insérées dans une table Ma_table

    donc je fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select AGENCE,CLIENT,MONTANT_ASSURANCE,COMMISSION,SOLDE_CLIENT
    from Ma_table
    order by COMMISSION asc
    il se peut qu'il y'ait un client avec plusieurs lignes (plusieurs commissions) donc je doit récupérer son SOLDE intial (avec un fonction) et à partir de ce SOLDE je compare si il couvre la commission j'insère dans une autre sinon j'insère dans une autre table.

    donc par exemple si le client a comme solde initial 100 EURO et il a 4 commssions comme suit

    commission 01 de 20 €
    commission 02 de 30 €
    commission 03 de 50 €
    commission 04 de 80 €

    ici le tableau va s'afficher ainsi :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    100   20   il couvre OK       insert into T1
    80    30   il couvre OK	      insert into T1
    50    50   il couvre ok	      insert into T1
    0   80   il couvre pas NON  insert into T2

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 803
    Points
    30 803
    Par défaut
    Je reformule la question :
    Quelle est l'information dans la table qui me permet d'identifier de manière unique et répétable quelle est la dernière valeur du solde, celle sur laquelle on se basera pour calculer le nouveau solde ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    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
    oui oui, le solde initial pour chaque client à partir de ce dernière on poursuit le calcul

  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
    Citation Envoyé par LandGreen Voir le message
    oui oui, le solde initial pour chaque client à partir de ce dernière on poursuit le calcul


    Aussi, la première valeur est récupérée via une fonction, je dis bien la première valeur du solde pour chaque client

  9. #9
    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
    Quel est le problème que tu rencontres, car tu as donné l'algorithme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Boucle 
     le client couvre OK       insert into T1
     sinon insert into T2
    fin boucle
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  10. #10
    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 McM Voir le message
    Quel est le problème que tu rencontres, car tu as donné l'algorithme
    le problème ici c'est :

    comment récupérer le nouveau solde à partir de la commission du ligne précédente pour le même client

  11. #11
    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
    alors mes amis? j'ai peut être mal expliqué?
    c'est quoi le problème !!

  12. #12
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonjour,

    Une (grosse) partie du problème est que les colonnes fournies ne permettent pas d'ordonnancer de manière précise la '1ere' ligne.
    Est-ce qu'on peut s'appuyer sur une date ??

    Dès que ceci est défini le reste n'est qu'une formalité qui sera faite en 1 seule requête et sans faire de boucle :
    https://docs.oracle.com/cd/B19306_01...0.htm#i1327527
    Le savoir est une nourriture qui exige des efforts.

  13. #13
    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 Michel.Priori Voir le message
    les colonnes fournies ne permettent pas d'ordonnancer de manière précise la '1ere' ligne.
    order by CLIENT , COMMISSION ASC

    exemple :
    client001 5 €
    client001 6 €
    client001 7 €
    client002 7 €
    client002 7 €
    client003 5 €
    client003 5 €
    client003 7 €
    client004 2 €
    .
    .
    .
    .

  14. #14
    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
    Avec une affectation de variable pour connaitre le client encours.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    declare
    v_client NUMBER := -1;
    BEGIN
     for rc IN (select client, montant from matable order by client)
     loop
       if v_client <> rc.client THEN 
        -- nouveau client
        v_client := rc.client -- on dit qu'on est sur ce client
      END IF;
      -- traitement  
    END LOOP;
    END;
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  15. #15
    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 pour votre retour,
    mais mon problème est sur le traitement sur les SOLDES et COMMISSIONS,
    comment mettre à jour le solde d'un nouveau client à partir de la 2eme ligne
    je vous remercie encore.

  16. #16
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Septembre 2016
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2016
    Messages : 731
    Points : 1 416
    Points
    1 416
    Par défaut
    Bonsoir,

    si l'ordre à prendre est la valeur du solde dans l'ordre croissant alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT AGENCE, CLIENT, MONTANT_ASSURANCE, COMMISSION, SOLDE_CLIENT
    , LAG (MONTANT_ASSURANCE) OVER (partition by CLIENT ordre by SOLDE_CLIENT asc) AS Lag_montant
    , LAG (COMMISSION) OVER (partition by CLIENT ordre by SOLDE_CLIENT asc) AS Lag_commission
    , SOLDE_CLIENT
      -LAG (MONTANT_ASSURANCE) OVER (partition by CLIENT ordre by SOLDE_CLIENT asc) 
      -LAG (COMMISSION) OVER (partition by CLIENT ordre by SOLDE_CLIENT asc)  as MARGE
    FROM le_nom_de_la_source
    devrait convenir


    ***EDIT***
    L'objectif est de faire un update ?
    De quelle colonne ?
    Comment savoir si l'update est déjà passé ???

    comment mettre à jour le solde d'un nouveau client à partir de la 2eme ligne
    Ben ça rejoint la question : comment détermine t'on la 1ere ligne ?

    ça m'a l'air du bricolage ta demande
    Le savoir est une nourriture qui exige des efforts.

  17. #17
    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
    L'objectif est de faire un update ?
    non l'objectif est de Mettre à jour le solde a chaque opération

    De quelle colonne ?
    on veut toujours Mettre à jour le solde par rapport aux commission précédente


    Comment savoir si l'update est déjà passé ???
    l’affichage de la colonne SOLDE on comparant avec COMMISSION de la ligne précédente

    Ben ça rejoint la question : comment détermine t'on la 1ere ligne ?
    dès que on a un nouveau client nous avons la fonction qui nu récupère son solde

    Merci

  18. #18
    Membre expérimenté Avatar de Cincinnatus
    Homme Profil pro
    Développeur d'applications métier
    Inscrit en
    Mars 2007
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur d'applications métier
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2007
    Messages : 592
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par LandGreen Voir le message
    non l'objectif est de Mettre à jour le solde a chaque opération
    update = mise à jour


    Citation Envoyé par LandGreen Voir le message
    l’affichage de la colonne SOLDE on comparant avec COMMISSION de la ligne précédente
    C'est effectué ligne par ligne ? Comparaison visuelle ?

    Citation Envoyé par LandGreen Voir le message
    dès que on a un nouveau client nous avons la fonction qui nu récupère son solde
    Quel est l'événement déclencheur ?

  19. #19
    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 Cincinnatus Voir le message
    update = mise à jour
    le solde initial sera récupérer pour chaque client, donc si on a par exemple un client qui a une seul commission on travaille seulement avec le solde initial, i.r le solde initial sera utilisé uniquement pour la 1ere ligne, pour le reste des ligne il dépendra du résultat de SOLDE-COMMISSION.


    C'est effectué ligne par ligne ? Comparaison visuelle ?
    oui


    Quel est l'événement déclencheur ?
    j'ai une vue qui récupère les lignes dont on veut effectuer les traitement.

  20. #20
    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
    On est en plsql.. faut développer, utilises des variables compteurs, initialisés à 1 au changement de client, puis tu comptes les lignes, fais des sommes etc..
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/04/2014, 11h24
  2. Insertion d'une mise à jour dans une création de vue
    Par Ptite_Tigresse dans le forum Langage SQL
    Réponses: 0
    Dernier message: 30/08/2007, 12h34
  3. Réponses: 2
    Dernier message: 14/05/2007, 10h45
  4. Mise à jour dans une table
    Par manucha dans le forum Oracle
    Réponses: 4
    Dernier message: 01/03/2007, 11h11
  5. Mise à jour d'une requête jointe
    Par freud dans le forum Bases de données
    Réponses: 1
    Dernier message: 19/02/2007, 08h47

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