Bonjour ,
J'ai créé une collection TABLE et lors de la compilation, j'ai l'erreur suivante :
Voici le code de ma procédure :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.
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 ?
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;
Merci !!
Partager