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 :

gestion des alias de table


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Par défaut gestion des alias de table
    Bonjour,

    Pour rappel je suis totalement novice en pl/sql et j'essaie de me débrouiller comme je peux, voic ce que je suis entrain de faire.

    J'ai une requête SQL très complexe qui doit utiliser des alias de table.

    Je vais faire un exemple simple :
    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
     
    SET SERVEROUTPUT ON
    DECLARE
     
    VAR1 table1.champ1%type;
    VAR2 table1.champ2%type;
    VAR3 ??????%type;
     
    CURSOR C1 IS 
                SELECT champ1,champ2,T2.champ3 from table_1, table_2 T2
    BEGIN
     
    OPEN C1;
    LOOP
    FETCH C1 INTO VAR1,VAR2,VAR3
    EXIT ............
    END LOOP;
    END;

    Comment puis-je déclarer ma VAR3 pour l'associer au champ3 de la table_2 qui utilise un alias ?

    J'ai essayer toute les possiblités mais je ne trouve pas la solution
    merci pour votre aide.

  2. #2
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    VAR3 table2.champ3%type tout simplement.

    Lorsque tu déclares ainsi une variable tu ne l'associe pas comme tu dis, tu indique simplement que ta variable est du même type.
    C'est totalement indépendant de ce qu'il y a dans ton curseur.

    Apres tu veux peut-être dire que table 2 n'est pas une table reelle mais issue d'un select ? Dans ce cas soit ton champ3 mappe sur un champ reel d'une table donc pas de souci, soit c'est le résultat d'un calcul et dans ce cas tu devras mettre le type de façon explicite (ex : VAR3 INTEGER)

  3. #3
    Membre éclairé Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Par défaut
    genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VAR3 table2.champ3 varchar(20);
    ?????

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ça veut dire quoi ?
     
    ERREUR à la ligne 11 :
    ORA-06550: Ligne 11, colonne 19 :
    PLS-00103: Symbole "VARCHAR" rencontré à la place d'un des symboles suivants :
    := . ( @ % ; not null range default character
    Symbole ":=" a été substitué à "VARCHAR" pour continuer.

  4. #4
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    Par défaut
    Non,

    Soit tu mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    VAR3 table2.champ3%type;
    Ce qui revient à dire, je déclare VAR3 du type du champ champ3 de la table table2.

    Soit
    Ce qui revient à dire, je déclare VAR3 de type VARCHAR2(20)

  5. #5
    Membre éclairé Avatar de PAYASS59
    Homme Profil pro
    Inscrit en
    Février 2005
    Messages
    755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2005
    Messages : 755
    Par défaut
    voici mon script qui fonctionne très bien.

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    SET SERVEROUTPUT ON
    DECLARE
    date_debut date;
    date_fin date;
    date_arret date;
    UF AGTAFFECT_HIS.CODUNIFON@rh.epsm%type;
    MATRICULE_AGENT PERSO.MATRICULE%type;
    DATE_CALENDRIER GTJOUR.DATE_%type;
    DATE_DEB_AFF AGTAFFECT_HIS.datdebaff@rh.epsm%type;
    DATE_FIN_AFF AGTAFFECT_HIS.datfinaff@rh.epsm%type;
    CURSOR C1 IS 
                SELECT AGTAFFECT_HIS.CODUNIFON,
                       substr(PERSO.MATRICULE,3),
                       '01'||TO_CHAR(GTJOUR.DATE_,'/MM/')||TO_CHAR(GTJOUR.DATE_,'SYYYY'),
                        GREATEST(AGTAFFECT_HIS.datdebaff, TO_DATE('20110101','YYYYMMDD')),
                        LEAST(NVL(AGTAFFECT_HIS.datfinaff,TO_DATE('20110228','YYYYMMDD')),TO_DATE('20110228','YYYYMMDD'))
                    FROM 
                        AGTAFFECT_HIS@rh.epsm,
                        GRADE  GRADE_PE_HISTO,
                        GTJOUR,
                        PERSO,
                        NIVEAU3,
                        NIVEAU4,
                        PE_HISTO PE_HISTO_03_NIVEAU3,
                        PE_HISTO PE_HISTO_04_NIVEAU4,
                        PE_HISTO PE_HISTO_08_GRADE,
                        TBABSJRS
                         WHERE 
                         ( PERSO.CODNIV3=NIVEAU3.CODNIV3(+)  )
                           AND  ( PE_HISTO_08_GRADE.CODE=GRADE_PE_HISTO.GRADE  )
                         AND ( PERSO.CODNIV4=NIVEAU4.CODNIV4(+)  )
                         AND  ( PE_HISTO_08_GRADE.INDTAB = 8  )
                         AND  ( GTJOUR.MATRICULE=PE_HISTO_03_NIVEAU3.MATRICULE(+) and GTJOUR.DATE_ BETWEEN PE_HISTO_03_NIVEAU3.DATDEB and PE_HISTO_03_NIVEAU3.DATFIN  )
                        AND  ( GTJOUR.MATRICULE=PE_HISTO_04_NIVEAU4.MATRICULE(+) AND GTJOUR.DATE_ between PE_HISTO_04_NIVEAU4.DATDEB AND PE_HISTO_04_NIVEAU4.DATFIN  )
                        AND  ( GTJOUR.MATRICULE=PE_HISTO_08_GRADE.MATRICULE(+) AND GTJOUR.DATE_ BETWEEN  PE_HISTO_08_GRADE.DATDEB AND PE_HISTO_08_GRADE.DATFIN  )
                        AND   ( TBABSJRS.MATRICULE(+)=GTJOUR.MATRICULE and TBABSJRS.DATABS(+)=GTJOUR.DATE_  )
                         AND     AGTAFFECT_HIS.nummatagt = substr(PERSO.MATRICULE,3) 
                         AND  AGTAFFECT_HIS.nummatagt = '538488';
    BEGIN
    date_debut := TO_DATE('20110101','yyyymmdd');
    date_arret := TO_DATE('20110228','yyyymmdd');
    OPEN C1;
    LOOP
    FETCH C1 INTO UF,MATRICULE_AGENT,DATE_CALENDRIER,DATE_DEB_AFF,DATE_FIN_AFF;
    date_fin:=LAST_DAY(date_debut);
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(date_debut,'yyyymmdd')||'   '||TO_CHAR(date_fin,'yyyymmdd')||'   '||UF||'   '||MATRICULE_AGENT);
    date_debut:=ADD_MONTHS(date_debut,+1);
    EXIT WHEN date_debut>=date_arret;
    END LOOP;
    END;


    Je veux rajouter dans mon select le champ : GRADE_PE_HISTO.GRADE AS CODE_GRADE,


    et là impossible j'ai essayé toutes les déclarations possibles ...rien à faire ????

  6. #6
    Membre Expert Avatar de Drizzt [Drone38]
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Mai 2004
    Messages
    1 001
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur de projet

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 001
    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    SET SERVEROUTPUT ON
    DECLARE
    date_debut date;
    date_fin date;
    date_arret date;
    UF AGTAFFECT_HIS.CODUNIFON@rh.epsm%type;
    MATRICULE_AGENT PERSO.MATRICULE%type;
    DATE_CALENDRIER GTJOUR.DATE_%type;
    DATE_DEB_AFF AGTAFFECT_HIS.datdebaff@rh.epsm%type;
    DATE_FIN_AFF AGTAFFECT_HIS.datfinaff@rh.epsm%type;
    GRADE_PE_HISTO GRADE_PE_HISTO.GRADE%type;
    CURSOR C1 IS 
                SELECT AGTAFFECT_HIS.CODUNIFON,
                       substr(PERSO.MATRICULE,3),
                       '01'||TO_CHAR(GTJOUR.DATE_,'/MM/')||TO_CHAR(GTJOUR.DATE_,'SYYYY'),
                        GREATEST(AGTAFFECT_HIS.datdebaff, TO_DATE('20110101','YYYYMMDD')),
                        LEAST(NVL(AGTAFFECT_HIS.datfinaff,TO_DATE('20110228','YYYYMMDD')),TO_DATE('20110228','YYYYMMDD')),
                        GRADE_PE_HISTO.GRADE AS CODE_GRADE                
    FROM 
                        AGTAFFECT_HIS@rh.epsm,
                        GRADE  GRADE_PE_HISTO,
                        GTJOUR,
                        PERSO,
                        NIVEAU3,
                        NIVEAU4,
                        PE_HISTO PE_HISTO_03_NIVEAU3,
                        PE_HISTO PE_HISTO_04_NIVEAU4,
                        PE_HISTO PE_HISTO_08_GRADE,
                        TBABSJRS
                         WHERE 
                         ( PERSO.CODNIV3=NIVEAU3.CODNIV3(+)  )
                           AND  ( PE_HISTO_08_GRADE.CODE=GRADE_PE_HISTO.GRADE  )
                         AND ( PERSO.CODNIV4=NIVEAU4.CODNIV4(+)  )
                         AND  ( PE_HISTO_08_GRADE.INDTAB = 8  )
                         AND  ( GTJOUR.MATRICULE=PE_HISTO_03_NIVEAU3.MATRICULE(+) AND GTJOUR.DATE_ BETWEEN PE_HISTO_03_NIVEAU3.DATDEB AND PE_HISTO_03_NIVEAU3.DATFIN  )
                        AND  ( GTJOUR.MATRICULE=PE_HISTO_04_NIVEAU4.MATRICULE(+) AND GTJOUR.DATE_ BETWEEN PE_HISTO_04_NIVEAU4.DATDEB AND PE_HISTO_04_NIVEAU4.DATFIN  )
                        AND  ( GTJOUR.MATRICULE=PE_HISTO_08_GRADE.MATRICULE(+) AND GTJOUR.DATE_ BETWEEN  PE_HISTO_08_GRADE.DATDEB AND PE_HISTO_08_GRADE.DATFIN  )
                        AND   ( TBABSJRS.MATRICULE(+)=GTJOUR.MATRICULE AND TBABSJRS.DATABS(+)=GTJOUR.DATE_  )
                         AND     AGTAFFECT_HIS.nummatagt = substr(PERSO.MATRICULE,3) 
                         AND  AGTAFFECT_HIS.nummatagt = '538488';
    BEGIN
    date_debut := TO_DATE('20110101','yyyymmdd');
    date_arret := TO_DATE('20110228','yyyymmdd');
    OPEN C1;
    LOOP
    FETCH C1 INTO UF,MATRICULE_AGENT,DATE_CALENDRIER,DATE_DEB_AFF,DATE_FIN_AFF, GRADE_PE_HISTO;
    date_fin:=LAST_DAY(date_debut);
    DBMS_OUTPUT.PUT_LINE(TO_CHAR(date_debut,'yyyymmdd')||'   '||TO_CHAR(date_fin,'yyyymmdd')||'   '||UF||'   '||MATRICULE_AGENT);
    date_debut:=ADD_MONTHS(date_debut,+1);
    EXIT WHEN date_debut>=date_arret;
    END LOOP;
    END;

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/09/2009, 18h38
  2. Gestion des relations entre tables
    Par Jasmine80 dans le forum DBDesigner
    Réponses: 10
    Dernier message: 09/02/2009, 15h33
  3. gestion des alias
    Par looping dans le forum Administration
    Réponses: 4
    Dernier message: 10/01/2009, 10h11
  4. Réponses: 7
    Dernier message: 26/01/2006, 12h19
  5. Gestion des Tables d'Object
    Par Laurent Dardenne dans le forum SQL
    Réponses: 27
    Dernier message: 17/04/2004, 12h39

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