Interrogation de collections en PL/SQL
Bonjour,
Je dois coder un bout de code PL/SQL qui me chagrine un peu, alors voilà :
J'ai un fichier de proprietés dont la forme est la suivante :
Code:
1 2 3 4
|
cle1=valeur1
cle2=valeur2
... |
Pour le lire, j'utilise le bout de code suivant :
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 49 50
|
create or replace
PROCEDURE P
( MYDIR IN VARCHAR2
, FIC IN VARCHAR2
) AS
monFichier UTL_FILE.FILE_TYPE;
buf VARCHAR2(4000);
TYPE ASSO IS RECORD (blc_zon_id varchar2(128), lib_value varchar2(128));
TYPE ASSO_TAB IS TABLE OF ASSO;
my_asso asso;
my_asso_tab asso_tab := asso_tab();
i integer := 1;
p1 varchar2(128);
p2 varchar2(128);
BEGIN
monFichier := utl_file.fopen(MYDIR,FIC,'r');
-- interrogation du fichier et construction d'une liste
loop
begin
utl_file.get_line(monfichier, buf);
exception
when no_data_found then exit;
end;
-- Premier découpage
if (buf is not null) then
IF (instr(buf,'=') = 0) THEN
my_asso.blc_zon_id:=substr(buf,instr(buf,'=')+1);
my_asso.lib_value:=null;
ELSE
my_asso.blc_zon_id:=substr(buf,0,instr(buf,'=')-1);
my_asso.lib_value:=substr(buf,instr(buf,'=')+1);
END IF;
my_asso_tab.extend;
my_asso_tab(i):= my_asso;
i:=i+1;
end if;
end loop;
utl_file.fclose(monfichier);
-- Affichage
for i in 1..my_asso_tab.count loop
dbms_output.put_line(rpad('cle='|| my_asso_tab(i).blc_zon_id, 40, ' ') ||
rpad('valeur='|| my_asso_tab(i).lib_value,40,' '));
end loop;
END P; |
La construction de ma collection de records (paires clé valeur) fonctionne.
Maintenant je voudrai dépasser cela, en trouvant un moyen rapide de sélectionner les valeurs qui correspondent à la clé recherchée.
Si quelqu'un a quelque chose de plus efficace qu'une itération de ce type :
Code:
1 2 3 4 5 6
|
for i in 1..my_asso_tab.count loop
if (my_asso_tab(i).blc_zon_id='B2Z19') THEN
dbms_output.put_line('trouvé!!! => valeur='||my_asso_tab(i).lib_value);
end if;
end loop; |
Merci ;)
PS : je ne peux pas changer le format du fichier d'entrée ... c'est comme ca ! :mouarf:
PPS : Si l'itération est la méthode la plus simple et surtout la plus efficace ... merci de me confirmer :aie:
Laurent