Bonjour, j'utilise oracle 10 g expresse, installé sur un serveur Linux, à distance et j'ai crée un pakage PL/SQL (heu je suis loin d'être un spécialiste Oracle) pour lire des données dans des fichiers, situés dans un répertoir, sur le même serveur linux où est installé ma base Oracle.
J'ai créer un répertoir oracle 'FICHIERS_IN' et mis des droits en lecture et écriture dessus, pour tout le monde, avec les instructions suivantes:
j'ai une fonction pricipale 'initialisation_codif' qui appelle 2 fonctions secondaires:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 CREATE DIRECTORY FICHIERS_IN AS '/home/share/aida/www; GRANT READ, WRITE ON DIRECTORY fichiers_in TO PUBLIC;
I) Une fonction qui ouvre et lit le contenu d'un fichier QH00.txt de paramètre qui contient:
1)une première ligne avec le nom d'un fichier de données qui s'appel QH00
2)Plusieurs lignes comportant chacune un chiffre (des paramètres qui me permettront de découper chacune des lignes de mon fichier de données, mais ce n'est pas le propos ici...)
II) une fonction qui se sert du précédent nom de fichier récuppéré par la fonction I) pour ouvrir un fichier de données et faire divers traitements dessus.
A noté que mes deux fichiers QH00.txt et QH00 sont dans le même répertoire :
'/home/share/aida/www
L'ouverture et la lecture du premier fichier 'QH00.txt' se passe sans problème et on récupère bien le nom du deuxième fichier nom_fic =QH00. Lorsque l'on fait afficher le nom du fichier nom_fic, entre l'appel de la première et de la deuxième fonction, on a bien QH00.
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
77
78
79
80 --FONCTION PRINCIPALE PROCEDURE initialisation_codif IS nomFic VARCHAR2(200); t_rang TYP_TAB_NUM; t_val TYP_TAB_VAR; BEGIN --ouverture et lecture de QH00.txt chargement_fichier_param('QH00.txt', nomFic,t_rang); dbms_output.put_line('initialisation_codif:' || nomFic || ':'); --ouvertur et lecture de QH00 lit_fic (nomFic, t_rang, t_val ); END initialisation_codif; --FONCTION I PROCEDURE chargement_fichier_param(nom_fic_param IN VARCHAR2, nom_fic OUT NOCOPY VARCHAR2, t_rang OUT NOCOPY TYP_TAB_NUM) IS v_ligne VARCHAR2(200); p_fic utl_file.file_type; n_count NUMBER :=1; BEGIN p_fic := utl_file.fopen(nom_rep_param, nom_fic_param, 'r'); utl_file.get_line(p_fic,v_ligne); nom_fic := v_ligne; dbms_output.put_line('Chargement_fichier_param :' || nom_fic); LOOP BEGIN utl_file.get_line(p_fic,v_ligne); dbms_output.put_line('Chargement_fichier_param :' || v_ligne); IF (v_ligne <> NULL) THEN t_rang(n_count):= v_ligne; END IF; n_count := n_count + 1; EXCEPTION WHEN NO_DATA_FOUND THEN utl_file.fclose(p_fic); EXIT; END; END LOOP; END chargement_fichier_param; --FONCTION II PROCEDURE lit_fic ( nom_fic IN VARCHAR2, t_rang IN TYP_TAB_NUM, t_val OUT TYP_TAB_VAR) IS v_ligne VARCHAR2(200); p_fic utl_file.file_type; n_count NUMBER; BEGIN --à l'affichage on a bien nom_fic qui est égale à QH00 dbms_output.put_line('lit_fic: '|| nom_fic); --ouverture du fchier, c'est à ce moment qu'est générée l'erreur :ORA-29283: opération non valide sur le fichier p_fic := utl_file.fopen(nom_rep_in, nom_fic, 'r'); LOOP BEGIN utl_file.get_line(p_fic,v_ligne); dbms_output.put_line(v_ligne); t_val(1):= SUBSTR (v_ligne,1 ,t_rang(1)); dbms_output.put_line(t_val(1)); n_count :=1; FOR i in 2..t_rang.COUNT LOOP n_count := n_count + t_rang(i-1); t_val(i):= SUBSTR (v_ligne,n_count,t_rang(i)); dbms_output.put_line(t_val(i)); END LOOP ; EXCEPTION WHEN NO_DATA_FOUND THEN utl_file.fclose(p_fic); EXIT; END; END LOOP; END lit_fic;
pourtant lors de l'ouverture du fichier QH00 dans la deuxième fonction, oracle nous renvois l'erreur
En revanche, si, au lieu de passer le paramètre nom_fic, à la fonction 'lit_fic',( paramètre récupéré à la fonction chargement_fichier_param) , on lui passe directement le paramètre 'QH00', on n'a pas d'erreur à l'ouverture du fichier QH00...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 ORA-29283: opération non valide sur le fichier ORA-06512: à "SYS.UTL_FILE", ligne 475 ORA-29283: opération non valide sur le fichier ORA-06512: à "AIDA_REPRISE.LOAD_FILE", ligne 17 ORA-06512: à "AIDA_REPRISE.LOAD_FILE", ligne 111 ORA-06512: à ligne 2
Ce qui me fait dire qu'il ne s'agit sans doute pas d'un problème de droit...
Je ne sais pas quoi faire et je tourne en rond depuis 2 jour.
Si quelqu'un a une idée, je suis preneuse....
Merci de votre aide!
Partager