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 :

Remplir une colonne à partir du résultat d'une requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut Remplir une colonne à partir du résultat d'une requête
    Bonjour,
    je dois comparer deux dates, cependant une se trouve en format date DD-MM-YYYY tandis que l'autre est en YYYY seulement.
    Pour ne pas avoir de perte d'information j'ai crée une nouvelle colonne dans ma table et souhaiterai la remplir avec les années de ma
    première date.
    J'ai extrait l'année via le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT EXTRACT(YEAR FROM date1)FROM table
    La requête me donne bien mes années extraites de mes dates.
    J'ai donc crée une colonne année afin d'y mettre le résultat de cette requête. Pour la remplir j'ai fais un PL/SQL mais il y a une erreur :
    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
    set serveroutput on
     
    declare
      requete varchar(1000);
      cursor c is 
        select extract (YEAR from date1) FROM table
    begin
      for item in c
      LOOP
      requete := 'update table set annee =''' || item '';
      dbms_output.put_line(requete || ';');
      --execute immediate (requete);
      END LOOP;
    END;
    /
    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    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 136
    Par défaut
    Citation Envoyé par Sandy1 Voir le message
    Pour la remplir j'ai fais un PL/SQL mais il y a une erreur
    Quelle erreur ?

    A la lecture de ton script, je peux prédire que s'il s'exécute toutes les lignes de ta table comporteront la même valeur dans la colonne annee, la dernière traitée. Ce qui n'est sans doute pas le résultat que tu attends.

    Pourquoi exécuter un code procédural, avec un curseur, alors qu'une simple requête suffit amplement (et peut être même sera plus rapide) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE  table
    SET annee   = EXTRACT(YEAR FROM date1)
    ;
    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.

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2015
    Messages : 6
    Par défaut
    J'ai fais une requête déjà mais cela m'a mis une erreur en me disant que ça me retourne plus d'une ligne,
    j'en ai donc déduit qu'il me faudrait un pl/sql mais visiblement cela n'a pas l'air d'être la bonne solution.
    Voici la requête que j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    update table 
    set annee=(select extract (year from date1) from table);
    Merci pour votre réponse.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2011
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Avril 2011
    Messages : 135
    Par défaut
    Bonjour,
    Vous devez ajouter une condition au niveau de la requête Update et même pour la sous requête.

  5. #5
    McM
    McM est déconnecté
    Expert confirmé

    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
    Billets dans le blog
    4
    Par défaut
    Un update est "résolu" ligne par ligne

    donc pour chaque ligne de table tu veux mettre à jour la colonne annee avec le résultat de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select extract (year from date1) from table
    Si jamais les tables sont différentes (ou ne référençant pas la même ligne de ta table updatée) alors tu dois modifier ta sous-requête pour ne ramener qu'une seule ligne
    Si date1 fait référence à la colonne date1 de la ligne de ta table que tu updates, alors il faut utiliser le code de al1_24

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/09/2012, 14h38
  2. Mise à jour d'une table à partir du résultat d'une requête
    Par zoharcryss dans le forum Langage SQL
    Réponses: 12
    Dernier message: 18/08/2009, 15h33
  3. Réponses: 4
    Dernier message: 12/06/2008, 17h54
  4. créer une colonne dans le résultat d'une requette
    Par timal78 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/07/2007, 10h21
  5. Réponses: 8
    Dernier message: 11/08/2006, 09h30

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