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

Langage SQL Discussion :

Aide sur requête dynamique


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Points : 0
    Points
    0
    Par défaut Aide sur requête dynamique
    Bonjour à tous,

    J'ai un soucis sur une requête de mise à jour dynamique, et j'aurais besoin d'aide :

    J'ai 2 tables + 1 cache :

    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
     
    ANOMALIE_DECLARATION
    (
     ID_OBJET_DE        NUMBER(10)                NOT NULL,
     ID_ETAT_DE          NUMBER(10)                NOT NULL,
     ENTITE_AFFECTATION  VARCHAR2(8 BYTE),
     
      ....
        )
     
      DECLARATION
    (
      ID_OBJET_DE                NUMBER(10)         NOT NULL,
      CONTRAT_EMPLOYEUR          VARCHAR2(8 BYTE),
       CONTRAT_EMPLOYEUR_CORRIGE          VARCHAR2(8 BYTE),
      ....)
     
      CACHE_CONTRAT
    (
      PORTEFEUILLE_EMPLOYEUR  VARCHAR2(8 BYTE),
    ...
    )
    Voici mon besoin :
    Pour chaque ANOMALIE_DECLARATION dont ENTITE_AFFECTATION = NULL.
    Récupérer CONTRAT_EMPLOYEUR_CORRIGE si non NULL ou sinon CONTRAT_EMPLOYEUR
    Rechercher dans CACHE_CONTRAT pour ce contrat employeur la valeur du « PORTEFEUILLE_EMPLOYEUR ».
    Réaliser la mise à jour suivante dans ANOMALIE_DECLARATION :
    ENTITE_AFFECTATION = valeur de CACHE_CONTRAT.PORTEFEUILLE_EMPLOYEUR


    Voici ma requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UPDATE ANOMALIE_DECLARATION  an
    SET (an.ENTITE_AFFECTATION) = (SELECT DISTINCT ci.PORTEFEUILLE_EMPLOYEUR from CACHE_CONTRAT cc
    where cc.PORTEFEUILLE_EMPLOYEUR = (select coalesce (de.CONTRAT_EMPLOYEUR_CORRIGE, de.CONTRAT_EMPLOYEUR ) from DECLARATION de, ANOMALIE_DECLARATION an
    where de.ID_OBJET_DE =an.ID_OBJET_DE
    and an.ENTITE_AFFECTATION IS NULL))
    where EXISTS  (SELECT DISTINCT cc.PORTEFEUILLE_EMPLOYEUR from CACHE_CONTRAT cc
    where cc.PORTEFEUILLE_EMPLOYEUR = (select coalesce (de.CONTRAT_EMPLOYEUR_CORRIGE, de.CONTRAT_EMPLOYEUR ) from DECLARATION de, ANOMALIE_DECLARATION an
    where de.ID_OBJET_DE =an.ID_OBJET_DE
    and an.ENTITE_AFFECTATION IS NULL))
    Je recupère l'erreur : ORA-01427: sous-interrogation ramenant un enregistrement de plus d'une ligne


    Quelqu'un saurait-il d'où vient le problème?

    Merci.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    votre problème vient de la requete qui permet de faire le "SET".

    Elle ramène plus d'une ligne du coup Oracle ne sait pas quoi mettre comme valeur.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par punkoff Voir le message
    bonjour,


    votre problème vient de la requete qui permet de faire le "SET".

    Elle ramène plus d'une ligne du coup Oracle ne sait pas quoi mettre comme valeur.
    Oui, c'est ce que j'en avais compris. Ma difficulté est de corriger cette requête.
    As-tu une idée?

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    la démarche pour ce genre de problème c'est d'exécuter chaque sous requete afin de voir laquelle renvoie plusieurs lignes.


    Vous devriez trouver sans problème d'où vient votre problème en utilisant cette méthode au vu du code ...

    Vous avez mis une jointure de trop dans la 2eme sous-requete. Utilisez l'alias de la table à updater pour réaliser votre jointure.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 7
    Points : 0
    Points
    0
    Par défaut
    effectivement mon erreur vient de me sauter au yeux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    UPDATE ANOMALIE_DECLARATION  an
    SET (an.ENTITE_AFFECTATION) = (SELECT DISTINCT ci.PORTEFEUILLE_EMPLOYEUR FROM CACHE_CONTRAT cc
    WHERE cc.PORTEFEUILLE_EMPLOYEUR = (SELECT coalesce (de.CONTRAT_EMPLOYEUR_CORRIGE, de.CONTRAT_EMPLOYEUR ) FROM DECLARATION de
    WHERE de.ID_OBJET_DE =an.ID_OBJET_DE
    AND an.ENTITE_AFFECTATION IS NULL))
    WHERE EXISTS  (SELECT DISTINCT cc.PORTEFEUILLE_EMPLOYEUR FROM CACHE_CONTRAT cc
    WHERE cc.PORTEFEUILLE_EMPLOYEUR = (SELECT coalesce (de.CONTRAT_EMPLOYEUR_CORRIGE, de.CONTRAT_EMPLOYEUR ) FROM DECLARATION de
    WHERE de.ID_OBJET_DE =an.ID_OBJET_DE
    AND an.ENTITE_AFFECTATION IS NULL))
    Merci.

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

Discussions similaires

  1. Aide sur requêtes
    Par Virgile59 dans le forum Access
    Réponses: 6
    Dernier message: 08/02/2006, 16h05
  2. besoin d'aide sur tableau dynamique
    Par littlesquall dans le forum C
    Réponses: 16
    Dernier message: 02/11/2005, 02h50
  3. aide sur requête sql
    Par Vodkha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 30/08/2005, 17h53
  4. Aide sur Requête SQL
    Par devdev dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 11/05/2005, 12h33
  5. Besoin d'aide sur requête croisée
    Par keawee dans le forum Access
    Réponses: 7
    Dernier message: 18/11/2004, 09h46

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