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 d’alias dans la procédure PL/SQL


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut Problème d’alias dans la procédure PL/SQL
    Salut à tous,

    J’ai problème avec ma procedure pl/sql. J’obtiens la faute suivante :

    PLS-00402: alias required in SELECT list of cursor to avoid duplicate column names

    J’ai trois tables, toutes les 3 ont les colonnes identiques(malheureusement je ne peut rien changer).
    Malgré le fait que j’utilise les alias, le problème n’est pas résolu. Quelqu’un peut il me dire ce que je dois encore faire ?

    Mon code(j’ai copier quelques lignes et changer le nom des tables).

    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
    create or replace 
    PROCEDURE P_insertion IS
    
        str_ereur  varchar2(200);
        sql_str     varchar2(32000);
    
        CURSOR C1 IS    
                          SELECT *
                          from table_1 t1, 
    		      table_2 t2
                          where not exists (
                                            select * from table_3 t3
                                            where   t1.id_medecin    =   t3.id_medecin  
                                            and     t1.id_s    =   t3.id_s
                                            and     t1.id_seq    =   t3.id_seq  
                                            and     t1.id_an    =   t3.id_an
                                            and     t1.id_ste    =   t3.id_ste)
                                            and     t1.id_statut  = 'new'
                                            and     t1.id_employe   = t2.id_employe
                                           ;
    BEGIN  
       FOR C1_rec IN C1 LOOP 
          begin
                    insert into table_3  t3
                       ( t3.id_medecin, 
                          t3.id_section, 
                          t3.id_produit,
                          t3.id_reseau
                        )
                          VALUES 
                          (
                           C1_rec.id_medecin, 
                           C1_rec.id_section, 
                           C1_rec.id_produit,
                          C1_rec.t2.id_reseau_change
                          ) ;                        
    
                    commit; 
             
            exception            
              when others then			
                rollback;
                  str_ereur := substr(sqlerrm,1,200);
              insert into test (test ) values (str_ereur);        
            end; 
    	END LOOP;
    COMMIT;
    END P_insertion;

    Je crois que le problème est au niveau de la ligne en gras rouge.


    Merci d’avance pour vos aides
    Fiona

  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
    PLS-00402 alias required in SELECT list of cursor to avoid duplicate column names

    Cause: A cursor was declared with a SELECT statement that contains duplicate column names. Such references are ambiguous.

    Action: Replace the duplicate column name in the select list with an alias.
    Vous devez utiliser les alias pour les colonnes et non pas pour les tables
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Select t1.id As Id, t2.id As id2
      From tab1 t1 Join tab2 t2 ;

  3. #3
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Salut mnitu,

    lorsque je modifie le code en ajoutant les alias aux noms des colonnes, j'ai les fautes suivantes:

    PLS-00364: loop index variable C1_rec use is invalid

    PL/SQL: ORA-00984: column not allowed here
    --> C1_rec.t2_id_reseau_change



    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
     
    create or replace 
    PROCEDURE P_insertion IS
     
        str_ereur  varchar2(200);
        sql_str     varchar2(32000);
     
        CURSOR C1 IS    
                          SELECT t1.*, t2.id_employe as t2_id_employe, t2.id_reseau_change as t2_id_reseau_change
                          from table_1 t1, table_2 t2
                          where not exists (
                                            select * from table_3 t3
                                            where   t1.id_medecin    =   t3.id_medecin  
                                            and     t1.id_s    =   t3.id_s
                                            and     t1.id_seq    =   t3.id_seq  
                                            and     t1.id_an    =   t3.id_an
                                            and     t1.id_ste    =   t3.id_ste)
                                            and     t1.id_statut  = 'new'
                                            and     t1.id_employe   = t2_id_employe
                                           ;
    BEGIN  
       FOR C1_rec IN C1 LOOP 
          begin
                    insert into table_3  t3
                       ( t3.id_medecin, 
                          t3.id_section, 
                          t3.id_produit,
                          t3.id_reseau
                        )
                          VALUES 
                          (
                           C1_rec.id_medecin, 
                           C1_rec.id_section, 
                           C1_rec.id_produit,
                          C1_rec.t2_id_reseau_change
                          ) ;                        
     
                    commit; 
     
            exception            
              when others then			
                rollback;
                  str_ereur := substr(sqlerrm,1,200);
              insert into test (test ) values (str_ereur);        
            end; 
    	END LOOP;
    COMMIT;
    END P_insertion;
    Merci
    Fiona

  4. #4
    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
    Il n'y pas de "<censuré>" dans votre procédure.
    Postez les ordres de création des tables nécessaire à la compilation des procédures ainsi qu'on exemple simple et cohérente de votre procédure.

    [Edit]
    Censure
    [/Edit]

  5. #5
    Membre confirmé Avatar de Fiona08
    Inscrit en
    Juillet 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 108
    Par défaut
    Salut mnitu,

    j'ai revu le code et constacter que j'avais un point de trop. donc plus de faute.

    Merci encore
    Fiona

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 998
    Billets dans le blog
    6
    Par défaut
    Oracle n'accepte pas les étoiles partielles du genre :
    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

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

Discussions similaires

  1. Utilisation d'une variable dans une procédure PL/SQL
    Par WOLO Laurent dans le forum PL/SQL
    Réponses: 6
    Dernier message: 31/10/2011, 11h00
  2. Réponses: 0
    Dernier message: 27/04/2009, 16h13
  3. Connections a une BD mysql dans une procédure stocké sql
    Par Zouko dans le forum MS SQL Server
    Réponses: 0
    Dernier message: 13/05/2008, 15h42
  4. Réponses: 5
    Dernier message: 01/04/2008, 12h00
  5. truncate dans une procédure PL/SQL
    Par pierre.egaud dans le forum PL/SQL
    Réponses: 14
    Dernier message: 27/11/2006, 17h27

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