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 :

Problème sur la requête


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Points : 406
    Points
    406
    Billets dans le blog
    1
    Par défaut Problème sur la requête
    bonjour, j'ai ecris une requete que voici.
    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
    DECLARE
      valeur NUMBER(12);
      CURSOR cur
      IS
        SELECT company_usr_last FROM company;
    BEGIN
      open cur;
      LOOP
        FETCH cur INTO valeur;
           EXIT WHEN cur%notfound;
        IF  valeur  not in 
     
     
          (SELECT company_contact_id FROM company_contact) 
          THEN
          UPDATE  company SET company_usr_last = 0 
          where company_usr_last=valeur;
        end if;
        END LOOP;
      close cur;
      END;
    probleme:quand je l'execute j'ai un message d'erreur qui me dit PLS-00405: sous-interrogation non autorisée dans ce contexte
    je rappelle que ma sous requete SELECT company_contact_id FROM company_contact me retourne plusieurs lignes.
    comment regler ce problème.merci

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    IF valeur not in (SELECT company_contact_id FROM company_contact)
    Tu ne peux pas le faire comme ça (NOT IN (SELECT) dans du PLSQL (IF ...)

    Soit tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN
     SELECT 1 INTO v 
      FROM company_contact
      WHERE company_contact_id = valeur 
     AND ROWNUM = 1;
    EXCEPTION WHEN NO_DATA_FOUND THEN ...  -- Pas de valeur trouvée
    END;
    Soit vu ton code, directement dans le curseur (ce qui est beaucoup plus rapide)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CURSOR cur IS 
    SELECT company_usr_last FROM company a WHERE NOT EXISTS (SELECT 1 FROM company_contact c
      WHERE c.company_contact_id = a.company_usr_last)
    More Code : More Bugs. Less Code : Less Bugs
    Mon Blog PL/Sql : Fichier Zip / Image BMP / Lire sqliteDB / QRCode et Images PNG ou BMP

  3. #3
    Membre averti

    Homme Profil pro
    informatique
    Inscrit en
    Avril 2013
    Messages
    280
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Avril 2013
    Messages : 280
    Points : 406
    Points
    406
    Billets dans le blog
    1
    Par défaut
    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
     
    DECLARE
      valeur NUMBER(12);
      CURSOR cur
      IS
        SELECT company_usr_last
        FROM company a WHEN NOT EXISTS
          (SELECT company_contact_id 
          FROM company_contact c
          WHERE c.company_contact_id = a.company_usr_last
          );
    BEGIN
      OPEN cur;
      LOOP
        FETCH cur INTO valeur;
        EXIT
      WHEN cur%notfound;
        UPDATE company SET company_usr_last = 0 WHERE company_usr_last=valeur;
      END LOOP;
      CLOSE cur;
    END;
    quand je l'execute j'ai tjrs 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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    Erreur commençant à la ligne 1 de la commande :
    DECLARE
      valeur NUMBER(12);
      CURSOR cur
      IS
        SELECT company_usr_last
        FROM company a WHEN NOT EXISTS
          (SELECT company_contact_id 
          FROM company_contact c
          WHERE c.company_contact_id = a.company_usr_last
          );
    BEGIN
      OPEN cur;
      LOOP
        FETCH cur INTO valeur;
        EXIT
      WHEN cur%notfound;
        UPDATE company SET company_usr_last = 0 WHERE company_usr_last=valeur;
      END LOOP;
      CLOSE cur;
    END;
    Rapport d'erreur :
    ORA-06550: Ligne 6, colonne 20 :
    PL/SQL: ORA-00933: la commande SQL ne se termine pas correctement
    ORA-06550: Ligne 5, colonne 5 :
    PL/SQL: SQL Statement ignored
    06550. 00000 -  "line %s, column %s:\n%s"
    *Cause:    Usually a PL/SQL compilation error.
    *Action:
    je me pose la question sur cette jointure dans le when not exist SELECT company_contact_id
    FROM company_contact c
    WHERE c.company_contact_id = a.company_usr_last

  4. #4
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT company_usr_last
        FROM company a WHEN NOT EXISTS
    Révisez SQL!

  5. #5
    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 reste toujours ébahi de cette propension à vouloir utiliser un curseur lorsqu'une simple requête ferait tout aussi bien l'affaire, et de manière bien plus efficcace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UPDATE  company tgt 
    SET     tgt.company_usr_last = 0 
    WHERE   NOT EXISTS
            (   SELECT  NULL 
                FROM    company_contact src
                WHERE   src.company_contact_id = tgt.company_usr_last
            )
    ;
    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.

  6. #6
    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
    Désolé, c'est moi qui ai fait une faute de frappe.
    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.

Discussions similaires

  1. problème sur une requête imbriquée
    Par pbatty1 dans le forum Requêtes
    Réponses: 12
    Dernier message: 26/10/2007, 17h21
  2. problème sur une requête mysql
    Par atomikado dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/10/2007, 16h04
  3. [Optimisation] Problème sur une requête UNION.
    Par françois62 dans le forum Requêtes
    Réponses: 5
    Dernier message: 28/06/2005, 16h08
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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