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 :

Select into avec une jointure & plsql


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    364
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 364
    Par défaut Select into avec une jointure & plsql
    Bonjour à tous,

    Je cherche à faire en plsql un select into dans une variable, mais qui récupère des données d'une jointure...
    Mon problème en fait est pour déclarer ma variable

    Actuellement, j'ai fait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    d_test table1%ROWTYPE;
     
    select * into d_test FROM table1 JOIN table2 using(champs)
    Etant donné que je dois récupérer des datas des deux tables, le fait de déclarer d_test en rowtype table1 me bloque...

    Comment donc résoudre ce problème tout à fait mineur pour vous certainement, mais bloquant pour moi

    merci

  2. #2
    Expert confirmé 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
    Par défaut
    Plusieurs techniques peuvent être employées ; voilà une qui utilise un curseur modèle pour permettre de déclarer la variable ensuite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    declare
      cursor crs_model Is
        Select * from emp join dept Using (deptno);
      l_rec  crs_model%Rowtype;
    Begin
      Select * 
        Into l_rec 
        From emp 
             join dept 
       Using (deptno) 
       Where empno = 7369;
      --  
    End;

  3. #3
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    364
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 364
    Par défaut
    En effet, cela fonctionne parfaitement au niveau de la déclaration

    Après, je veux récupérer mes valeurs pour un delete, donc, je suppose que je dois parcourir ma variable déclarée en type curseur ?

    Je vais voir pour ça !

    Merci !!!


    PS: Je classe en résolu, une fois que ma procédure fonctionnera complètement

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2005
    Messages
    364
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 364
    Par défaut
    Slt,

    J'ai fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    OPEN curseur;
    FETCH curseur INTO d_var;
     
    DELETE table where TRAITE = d_var.monchamps;
    CLOSE curseur;
    Mais, alors que monchamps est récupéré par la requête de mon curseur (comme c'est une colonne retourné de la requête), il ne veut pas y accéder, donc je dois mal faire quelque chose....

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    507
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 507
    Par défaut
    Citation Envoyé par bobic Voir le message
    Mais, alors que monchamps est récupéré par la requête de mon curseur (comme c'est une colonne retourné de la requête), il ne veut pas y accéder, donc je dois mal faire quelque chose....
    Qu'entendez vous par "il ne veut pas y accéder"?

    Ajoutez "dbms_output.put_line (d_var.monchamps);" pour voir ce que vous avez dans votre variable.

  6. #6
    Expert confirmé 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
    Par défaut
    Chaque fois, quand vous ramenez une valeur via un select pour ensuite la passer à un autre DML, delete dans votre cas, dit vous que c’est mauvais et que la solution correcte est d’écrire un seul delete de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Delete table where col = (Select col fromWhere)

  7. #7
    Membre chevronné Avatar de xdescamp
    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 300
    Par défaut
    Bonjour,

    Il faut que tu déclares ta requête dans un curseur, puis que tu définisses ta variable en tant qu'enregistrement de ton curseur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    DECLARE
    CURSOR mon_curseur IS
      SELECT * INTO d_test FROM table1 JOIN table2 USING(champs);
      d_test mon_curseur%ROWTYPE;
    BEGIN
      OPEN mon_curseur;
      FETCH mon_curseur INTO d_test;
      CLOSE mon_curseur;

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/12/2012, 12h51
  2. Réponses: 1
    Dernier message: 23/08/2006, 14h11
  3. [DB2] Problèmes avec une Jointure externe sur des vues
    Par treivse dans le forum Langage SQL
    Réponses: 6
    Dernier message: 11/07/2006, 11h42
  4. [PL/SQL] SELECT INTO avec type TABLE
    Par Kaejar dans le forum Oracle
    Réponses: 13
    Dernier message: 06/07/2006, 16h17
  5. INSERT INTO avec une valeur numéroauto
    Par priest69 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 08/11/2005, 15h39

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