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 :

PL SQL update a partir d une requete


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut PL SQL update a partir d une requete
    Bonjour
    Je dois creer une procedure et faire un UPDATE sur une table a partir du resultat d'une requete.
    Or je saia qu'en ORACLE on ne peut pas faire un UPDATE nomtable
    SELECT......
    Or comme j'ai plusieurs champs a mettre a jour a partir de cette requete je n'ai pas la force de faire du travail sale et de mettre dans chaque champs le select approprie
    Donc je me suis dis qu'on peut peut etre en Pl/sql mettre le resultat du select dans des variables et faire un Update avec ces variables. Mais je ne saia pas comment m'y prendre.

    Merci
    A++

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Citation Envoyé par shmoolki Voir le message
    Or je saia qu'en ORACLE on ne peut pas faire un UPDATE nomtable
    SELECT......
    Vous savez mais en réalité vous avez tort - enfin en partie.
    C'est simplement un problème de syntaxe.
    Laissez tomber l'idée du curseur et de la boucle.

    Quelle mise à jour souhaitez-vous effectuer ?

  3. #3
    Membre du Club
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut
    Merci de votre réaction aussi rapide,

    J'ai une requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from transport_lines where transport_id = ? and cell_id = ?
    Et je veut UPDATER la table supplied_A telle que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    supplied_A.weighto = transport_lines.exit_weight
    ..... de meme pour 7 champs
    WHERE
    supplied_A.transport_id=transport_lines.transport_id

    Tout simplement

    Merci

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 134
    Par défaut
    La commande MERGE pourrait répondre à ton besoin
    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
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 454
    Par défaut
    Comme le dit al1_24, avec MERGE (syntaxe 10g+) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     MERGE INTO supplied_A as tgt
     USING transport_lines as src
        ON (src.transport_id = tgt.transport_id
       AND  src.transport_id = ?
       AND  src.cell_id      = ?)
      WHEN MATCHED THEN UPDATE
       SET tgt.weighto = src.exit_weight
         , tgt.col2    = src.col2
         , tgt.col3    = src.col3
         , ...;
    Ou même UPDATE directement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    UPDATE supplied_A
       SET (weighto, col2, col3, ...) = (SELECT exit_weight, col2, col3...
                                           FROM transport_lines
                                          WHERE transport_lines.transport_id = supplied_A.transport_id
                                            AND transport_lines.transport_id = ?
                                            AND transport_lines.cell_id      = ?)
     WHERE EXISTS (SELECT NULL
                     FROM transport_lines
                    WHERE transport_lines.transport_id = supplied_A.transport_id
                      AND transport_lines.transport_id = ?
                      AND transport_lines.cell_id      = ?);

  6. #6
    Membre du Club
    Inscrit en
    Mars 2013
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mars 2013
    Messages : 5
    Par défaut Syntaxe MERGE
    Je recherche des infos sur cette commande et j e ne saia pas si on peut faire deux conditions dans le ON du MERGE

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    MERGE INTO transport_lines tl 
    using (
    	select * from supplied_a_conf 
    	where nvl(datetime_conf,to_date('01-01-1970','dd-mm-yyyy')) = to_date('01-01-1970','dd-mm-yyyy')
    		) s
     ON (tl.transport_id = s.transport_id AND tl.cell_id = s.cell_id)
     WHEN MATCHED THEN UPDATE
     SET c...
     ;
    et est ce que on peurt ne pas mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHEN NOT MATCHED THEN INSERT (..
    Merci beaucoup

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/10/2007, 16h26
  2. [SQL Server] Update à partir d'une liste
    Par NicoNGRI dans le forum Langage SQL
    Réponses: 4
    Dernier message: 07/08/2007, 17h42
  3. [SQL]Creer une table a partir d'une requete SELECT * INTO
    Par aliboubou dans le forum Requêtes et SQL.
    Réponses: 7
    Dernier message: 03/04/2007, 11h30
  4. Comment faire du MDX à partir d'une requete SQL?
    Par Immobilis dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 10/11/2005, 09h46
  5. Tableau a partir d'une requete sql
    Par 10-nice dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/10/2004, 16h37

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