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 :

problème collection TABLE


Sujet :

SQL Oracle

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut problème collection TABLE
    Bonjour ,

    J'ai créé une collection TABLE et lors de la compilation, j'ai l'erreur suivante :

    PLS-00103: Encountered the symbol "LCF" when expecting one of the
    following:
    . ( * @ % & = - + ; < / > in mod not rem an exponent (**)
    <> or != or ~= >= <= <> and or like between is null is not ||
    is dangling
    The symbol "." was substituted for "LCF" to continue.
    Voici le code de ma procédure :

    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    procedure films_diffuses(n integer) is 
     
     
    	type dfilm is record(
    		idf integer,	
    		cpte integer);			
     
    	type type_compte_film is TABLE of dfilm ;
     
     
    	lcf type_compte_film;	
    	tmp type_compte_film;
     
     
    	cursor c_film is SELECT id_film from horaire order by id_film ;
    	tuple c_film%rowtype;
     
    	i integer;
    	nb integer;
    	ante_id integer;
     
    	rq varchar(50);
    	nomf varchar(100);
     
     
     
    begin
    	ante_id := 0;
     
    	-- On ouvre un cursor c_film
    	open c_film;
    	fetch c_film into tuple;
     
    	while (c_film%found) loop 
    		-- Si on trouve un nouveau film							
    		if (tuple.id_film != ante_id) then
    			-- On agrandit la collection
    			lcf.extend;
    			-- On récupère l'identifiant du film
    			lcf(lcf.count).idf := tuple.id_film
    			-- On met son compte à 1
    			lcf(lcf.count).cpte := 1;
     
    		-- Si c'est toujours le même film, on augmente son compte de 1
    		else
    			lcf(lcf.count).cpte := lcf(lcf.count).cpte+1;
    		end if;		
    		ante_id := tuple.id_film;
    		fetch c_film into tuple;		
    	end loop;
    	close c_film;
     
    	-- On trie maintenant le tableau
    	nb := lcf.count;
    	tmp.extend;
    	for i in 1..nb-1 loop
    		if (lcf(i).cpte < lcf(i+1).cpte) then
    			tmp(1).idf:=lcf(i+1).idf;
    			tmp(1).cpte:=lcf(i+1).cpte;
    			lcf(i+1).idf := lcf(i).idf;
                 		lcf(i+1).cpte := lcf(i).cpte;
                   		lcf(i).idf:=tmp(1).idf;
                   		lcf(i).cpte:=tmp(1).cpte;
                   	end if;	
    	end loop;
     
    	-- On va récupérer maintenant le nom des n films les plus diffusés
     
    	for i in 1..n loop
    		rq := 'SELECT nom_film from film where id_film = '||lcf(i).idf;
    		execute immediate rq into nomf;
    		dbms_output.put_line(nomf||'diffuse '||lcf(i).cpte||' fois');		
    	end loop;
     
     
    end;
    J'ai vu dans le forum que le EXTEND ne fonctionnait pas sur une collection non initialisée. Est-ce que l'erreur vient de là ? Ou dois-je chercher ailleurs ?

    Merci !!

  2. #2
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Effectivement une collection de type NESTED TABLE ne peut pas être manipulée avant d'avoir été initialisée.

    Si vous n'utilisez pas cette collection pour mettre à jour directement une table, utilisez plutôt une collection de type INDEX BY BINARY_INTEGER.
    de la sorte, la méthode .EXTEND n'est plus nécessaire.

    Voir au besoin les explications suivantes :
    http://sheikyerbouti.developpez.com/...?page=Chap5#L5
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    J'ai modifié quelque peu le code avec le index by...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    type type_compte_film is TABLE of dfilm index by binary_integer;
     
     
    	lcf type_compte_film;	
    	tmp type_compte_film;
    et

    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
    begin
    	i := 0;
    	ante_id := 0;
     
    	-- On ouvre un cursor c_film
    	open c_film;
    	fetch c_film into tuple;
     
    	while (c_film%found) loop 
    		-- Si on trouve un nouveau film							
    		if (tuple.id_film != ante_id) then
    			i := i+1;			
    			-- On récupère l'identifiant du film
    			lcf(i).idf := tuple.id_film
    			-- On met son compte à 1
    			lcf(i).cpte := 1;
     
    		-- Si c'est toujours le même film, on augmente son compte de 1
    		else
    			lcf(i).cpte := lcf(i).cpte+1;
    		end if;		
    		ante_id := tuple.id_film;
    		fetch c_film into tuple;		
    	end loop;
    Mais toujours la même erreur...

  4. #4
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    peut-on savoir sur quelle ligne de la procédure ?
    Rédacteur Oracle (Oracle ACE)
    Guide Oracle ,Guide PL/SQL, Guide Forms 9i/10g, Index de recherche
    Je ne réponds pas aux questions techniques par MP
    Blogs: Forms-PL/SQL-J2EE - Forms Java Beans

  5. #5
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Ca a l'air d'etre à la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lcf(i).idf := tuple.id_film
    En fait dès que je l'utilise...

  6. #6
    Futur Membre du Club
    Inscrit en
    Avril 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2004
    Messages : 10
    Points : 5
    Points
    5
    Par défaut


    oups j'ai honte... saleté de ;

    désolée...




    En meme temps, je suis contente ça marche maintenant ...
    Enfin merci pour le extend !!

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Mai 2003
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2003
    Messages : 412
    Points : 1 326
    Points
    1 326
    Par défaut
    forcement il te manque un ; à la fin

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

Discussions similaires

  1. Probléme collection d'objets
    Par Contrec dans le forum MFC
    Réponses: 1
    Dernier message: 14/04/2005, 10h08
  2. Probléme créate Table
    Par Silvia12 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 01/03/2005, 15h14
  3. Réponses: 19
    Dernier message: 23/12/2004, 12h01
  4. Problème de TABLE ACCESS FULL
    Par elitost dans le forum Administration
    Réponses: 14
    Dernier message: 25/09/2004, 12h37
  5. problème de table
    Par ekmule dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/04/2004, 14h04

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