Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/12/2010, 14h44   #1
Membre à l'essai
 
Avatar de Fiona08
 
Inscription : juillet 2008
Messages : 108
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 108
Points : 21
Points : 21
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 :
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
Fiona08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 15h06   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 808
Points : 5 808
Citation:
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 :
1
2
3
 
SELECT t1.id AS Id, t2.id AS id2
  FROM tab1 t1 JOIN tab2 t2 ;
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 15h27   #3
Membre à l'essai
 
Avatar de Fiona08
 
Inscription : juillet 2008
Messages : 108
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 108
Points : 21
Points : 21
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 :
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
Fiona08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/12/2010, 15h46   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 808
Points : 5 808
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]
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 14h30   #5
Membre à l'essai
 
Avatar de Fiona08
 
Inscription : juillet 2008
Messages : 108
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 108
Points : 21
Points : 21
Salut mnitu,

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

Merci encore
Fiona
Fiona08 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2010, 21h34   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 764
Points : 17 764
Oracle n'accepte pas les étoiles partielles du genre :
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 00h52   #7
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 463
Points : 10 463
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Mais si il les accepte, c'est le as sur les alias du from qu'il n'accepte pas.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h15.


 
 
 
 
Partenaires

Hébergement Web