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 :

idée sur un curseur.


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    Par défaut idée sur un curseur.
    Bonjour,

    J'ai 2 tables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    T1
    p11     p12     p13    p14
    1       ?       toto   titi1
    2       ?       ?      titi2
    3       100     ?      titi3
    4       150     toto   titi4
     
    T2
    p21     p22
    100     Lib100
    200     Lib200
    Si p12=? ou non trouvé dans T2 (T1.p12=T2.p21) => err1
    Si p13=? => err2.

    Je dois réaliser un curseur récupérant les enregistrements suivant les critères ci-dessus et envoyer des messages dans une table 3. Je suis un peu novice en la matière. Avez-vous une petite idée qui pourrait me faire démarrer.

    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Ingénieur
    Inscrit en
    Mai 2004
    Messages
    69
    Détails du profil
    Informations personnelles :
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Mai 2004
    Messages : 69
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    DECLARE C CURSOR FOR
        SELECT
          p11,
          p12,
          p13,
          p14,
          KO
        FROM T1,
        (SELECT p12 as KO FROM T1 left outer join T2 on T1.p12=T2.p21 
         WHERE p21 is null) TEMP
        WHERE 
           T1.p12= TEMP.KO
        OR T1.P12 is null
        OR P13 is null
        ;
     
        OPEN C;
     
        FETCH C INTO H_P11, H_P12, ...
     
        WHILE (sqlcode=0) DO
          IF (H_p12 is null) or (H_p12 =H_KO) THEN 
            INSERT INTO T_ERR ...
          END IF;
          IF (H_p13 is null) THEN 
            INSERT INTO T_ERR ...
          END IF;
          FETCH C INTO H_P11, H_P12, ...
        END WHILE;
        CLOSE C;
    END;
    J'ai trouvé ce code mais il y a encore une erreur de doublon.

    Est ce que ma requete est correcte logiquement ? Merci

  3. #3
    Membre averti Avatar de boisdin
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 56
    Par défaut
    J'ai l'impression que ton curseur est bien compliqué;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECLARE C CURSOR FOR
    select P11,P12,P13,P14,P21 from T1 T1 LEFT OUTER JOIN T2 ON T1.p12=T2.p21
        WHERE 
         T1.P12 IS NULL
        OR T2.P21 is null
        OR T1.P13 IS NULL
    ;
    et pourquoi pas directement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Insert into T_ERR (select P11,P12,P13,P14,P21 from T1 T1 LEFT OUTER JOIN T2 ON T1.p12=T2.p21
        WHERE 
         T1.P12 IS NULL
        OR T2.P21 is null
        OR T1.P13 IS NULL)
    ;

  4. #4
    Membre expérimenté
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2005
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 250
    Par défaut
    Est ce que tu peux préciser un peu ton besoin?

    Si j'ai bien compris, ce que tu veux faire c'est :
    - parcourir la table T1 pour trouver toutes les lignes ou p12='?' ou les lignes ou la valeur de p12 n'existe pas dans T2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    DECLARE
    CURSOR my_cursor IS
    SELECT * 
    FROM T1
    WHERE p12 = '?'
    OR P12 NOT IN (SELECT DISTINCT p21 FROM T2);
    - ensuite pour chaque ligne qui correspond à ce SELECT (curseur), tu dois insérer un truc dans une autre table?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    BEGIN
    FOR my_row IN my_cursor
    LOOP
      INSERT INTO T3 ..<mets ici ce que tu veux>...
    END LOOP;
    END;
    tu peux utiliser les valeurs de my_row en ajoutant un point
    ex : my_row.p13

Discussions similaires

  1. Problème de scintillement sur le curseur d'une TTrackbar
    Par xtapola dans le forum Composants VCL
    Réponses: 2
    Dernier message: 18/11/2005, 13h51
  2. [debutant]effet sur le curseur
    Par charaf dans le forum Interfaces Graphiques en Java
    Réponses: 3
    Dernier message: 15/11/2005, 21h24
  3. [Access] Manque d'idées sur une requête
    Par portu dans le forum Langage SQL
    Réponses: 12
    Dernier message: 22/11/2004, 12h25
  4. Problème graveur ide sur mdk10
    Par Hanslip dans le forum Matériel
    Réponses: 40
    Dernier message: 26/10/2004, 13h17
  5. idees sur requete a simplifier ???
    Par DaxTaz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/07/2004, 09h42

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