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 :

Bloc anonyme pl/sql


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Par défaut Bloc anonyme pl/sql
    Rebjr !

    Voilà, je veux donc éxécuter un bloc pl/sql qui me permet d'appeler une procédure qui va inscrire l'utilisateur donnée à un client dans une table et tester s'ils st pas déjà présents dans la table.
    J'emploie donc la procédure dans une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    BEGIN
    FOR rec in (select nom,prenom,mdp from table_user
                    where not exists (select 'x' from table_inscrits t2 ,table_clients t3
                                                     where t1.iduser=t2.iduser
                                                     and t1.idclient=t3.idclient))
    LOOP
    mon_package.maprocedure(rec.nom,rec.prenom,rec.mdp,client);
    END LOOP;
    END;
    Mais voilà, message d'erreur sur ma procédure "L'extraction exacte ramène plus que le nombre de lignes demandé".
    Prtant la requête dans ma procédure fait une comparaison entre mes paramètres (IN) avec les données de mes tables, et fais l'insertion qd c'est le cas, donc ne renvoie qu'une seule ligne qd il y a correspondance car une seule ligne par utilisateur inscrit à un client donné.

    Où pourrais-je me tromper ?

  2. #2
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    L'erreur doit provenir peut-être de ta procédure, parce que là, d'un rapide coup d'oeil, je ne vois pas ce qui cloche.

    Pourrais-tu donner plus de détail sur l'algo de ta procédure ?

    Edit: Je parle bien sûr de la procédure que tu as représenté par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     mon_package.maprocedure(rec.nom,rec.prenom,rec.mdp,client);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Par défaut
    Là voilà !

    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
     
    PROCEDURE ma_proc(name,fname,mdpwd,client)
    --variables
    BEGIN
    --test client&utilisateur existent
    select id_utl,nom,prenom,mdp,id_cli,nomcli INTO iduser,idcli...
       from table_user,table_clients
       where name=nom
       and   fname=prenom
       and   mdpwd=mdp
       and  client=nom_client;         <---modification le 30/08 à 20h56
    --test si utilisateur inscrit
    select actif into a 
    from table_inscrit
     where id_cli=idcli
     and id_utl=iduser
      if a=0 THen
       raise
      end if;
    EXCEPTION
     when no_data_found then
        if iduser is null THEN
          raise..
        else
          insert...
       end if;
    END;

  4. #4
    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
    cette requete doit ramener plus d'une ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select id_utl,nom,prenom,mdp,id_cli,nomcli 
    INTO iduser,idcli...
       from table_user,table_inscrit,table_clients
       where name=nom
       and   fname=prenom
       and   mdpwd=mdp
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select actif into a 
    from table_inscrit
     where id_cli=idcli
     and id_utl=iduser
    Tu peux gérer le WHEN TOO_MANY_ROWS

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 61
    Par défaut
    Le fait est qu'elle va comparer ma chaîne de caractère et récupérer l'id de l'utilisateur et du client concerné. Comment se pourrait-il qu'il renvoie plus d'une ligne vu qu'il n'y a qu'une inscription possible ? étant donné qu'un utilisateur ne peut pas être membre plus d'une fois à un même client.

    edit:non j'ai bien vérifié. qd je rentre les bons paramètres, mes ids concernés sur la première requête sont prises, puis dans la 2eme je fais une comparaison avec ces premiers pour gérer s'ils sont déjà inscrits. J'ai bien une ligne de retournée.

  6. #6
    Membre averti
    Inscrit en
    Août 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 20
    Par défaut
    Bonjour,

    Tu pourrais pour trouver d'où vient ton erreur ajouter une variable number
    'numinst' et lui affecter des valeurs incrémentée avant et après chacun de tes select puis gérer l'exception TOO_MANY_ROWS et retourner en paramètre OUT de ta procédure le numéro d'instruction et pourquoi pas le concaténer avec le name et le client afin d'identifier quel enregistrement te pose problème.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/05/2010, 00h19
  2. probleme avec group by dans un bloc anonyme
    Par lucaazori1988 dans le forum PL/SQL
    Réponses: 2
    Dernier message: 04/05/2010, 14h09
  3. Réponses: 5
    Dernier message: 16/05/2008, 15h34
  4. bloc anonyme PL/PGSQL
    Par moumoune65 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 08/02/2008, 14h02
  5. DIstinct sur un bloc basé PL/SQL Forms9i
    Par maradi dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/12/2007, 15h49

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