Es que c'est possible de donner a une variable une valeur se trouvant dans un fichier texte ????
J'aimerai faire une boucle et qu'une variable puisse prendre differentes valeurs qui se trouverai dans un fichier texte au prealable.
Version imprimable
Es que c'est possible de donner a une variable une valeur se trouvant dans un fichier texte ????
J'aimerai faire une boucle et qu'une variable puisse prendre differentes valeurs qui se trouverai dans un fichier texte au prealable.
Oui c'est possible grace au package utl_file
voila qui devrait t'aider ;)
http://www.developpez.net/forums/viewtopic.php?t=198598
et
http://www.developpez.net/forums/viewtopic.php?t=197957
Savez vous d'ou vient cette erreur ???
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 SQL> declare 2 f_file_id UTL_FILE.FILE_TYPE; 3 BEGIN 4 f_file_id := UTL_FILE.FOPEN('test','testecri','a'); 5 UTL_FILE.PUT_LINE (f_file_id,'Il est beau mon fichier :-D'); 6 UTL_FILE.FCLOSE (f_file_id); 7 end; 8 / declare * ERROR à la ligne 1 : ORA-06510: PL/SQL : exception définie par l'utilisateur non traitée ORA-06512: à "SYS.UTL_FILE", ligne 98 ORA-06512: à "SYS.UTL_FILE", ligne 157 ORA-06512: à ligne 4
Pour moi cela viens du fait que ton repertoire de sortie n'est pas bon dans ton utl_file.fopen...
As tu fait ceci :
Attention le nom du DIRECTORY doit être en MAJUSCULE ;)Code:
1
2 CREATE OR REPLACE DIRECTORY MON_REP AS '/oracle'; GRANT READ,WRITE ON DIRECTORY MON_REP TO mon_user;
J'ai une erreur sur les privilèges:
Code:
1
2
3
4
5
6
7
8
9 SQL> CREATE OR REPLACE DIRECTORY TEST AS 'C:\test'; Répertoire créé. SQL> GRANT READ,WRITE ON DIRECTORY TEST TO Pack95; GRANT READ,WRITE ON DIRECTORY TEST TO Pack95 * ERROR à la ligne 1 : ORA-22928: privilège sur répertoires non valide
j'arrive a donner le privilège read mais pas le Write .
Une ptite idée ??
Code:
1
2
3
4
5
6
7
8
9 SQL> GRANT READ ON DIRECTORY TEST TO PACK95; Autorisation de privilèges (GRANT) acceptée. SQL> GRANT READ, WRITE ON DIRECTORY TEST TO PACK95; GRANT READ, WRITE ON DIRECTORY TEST TO PACK95 * ERROR à la ligne 1 : ORA-22928: privilège sur répertoires non valide
l'utilisateur qui exécute les process Oracle a-t-il les droits sur ce répertoire ?
C'est quel OS et quel est l'utilisateur d'installation ?
Oracle 8i.
J'ai mit les droits sur "Pack95" a partir de "System" mais je n'arrive pas a donner le droit d'ecriture.
ATTENTION : je parle du coté OS... si l'utilisateur oracle (ou autre qui a servi pour l'install) n'a pas les droits sur le répertoire définit dans la DIRECTORY ça ne marchera effectivement pas ;)
Comment savoir quel utilisateur a les droits dessus??
t'es sous Linux ou Windows ?
Sous linux tu vois les droits sur le fichier avec ls -l <fichier>, sous windows c'est dans les propriétés du répertoire ;)
Attention, sous windows, ça ne peux pas marcher sur les lecteurs réseaux, il faut dans ce cas utiliser le chemin complet de la forme \\serveur\dossier
mai en faite es que d'un poste client je peut utiliser un dossier du poste client?? peut on donner les droits a partir du poste client ??
ha non pas du tout, c'est un répertoire du serveur qu'il faut indiquer ;)
Es que le dossier doit etre a un endroit specifique sur le serveur ou pas ??
parce ke la j'arrete pa d'avoir toujours les memes erreurs. :cry:
pas sur un lecteur réseau c'est tout et dans un répertoire ou le compte qui lance la base a les droits en écriture
Je comprend vraiment pas pourkoi ca veut pas marcher..... :cry:
J'arrive a bien donner les droits de lecture. J'arrive pas pour l'ecriture
et quand je lance une operation de lecture dans un fichier j'ai cette erreur:
mais pourtant j'utilise bien un dossier n'etant pas sur un lecteur reseau et sur lequel j'ai tout les droits.Code:
1
2
3
4
5 ERROR à la ligne 1 : ORA-06510: PL/SQL : exception définie par l'utilisateur non traitée ORA-06512: à "SYS.UTL_FILE", ligne 98 ORA-06512: à "SYS.UTL_FILE", ligne 157 ORA-06512: à ligne 4
Vous n'auriez pas un autre moyen de pouvoir lire dans un fichier ??
Tu as bien une version d'Oracle supérieur ou égale à la 8i ?
le nom du DIRECTORY doit être en majuscule ;)
Colle ton code ici qu'on voit d'où vient l'erreur
Version:
Code:
1
2
3 Connecté à : Oracle8i Release 8.1.7.0.0 - Production JServer Release 8.1.7.0.0 - Production
Je me connecte avec l'utilisateur "SYS" a partir du poste serveur oracle.
Ensuite je me reconnecte en utilisateur "Pack95" sur le poste serveur.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 SQL> show parameter utl_file NAME TYPE VALUE ------------------------------------ ------- ------------------------- utl_file_dir string SQL> CREATE OR REPLACE DIRECTORY TEST AS 'D:\ORA817\TEST'; Répertoire créé. SQL> GRANT READ, WRITE ON DIRECTORY TEST TO Pack95; GRANT READ, WRITE ON DIRECTORY TEST TO Pack95 * ERREUR à la ligne 1 : ORA-22928: privilège sur répertoires non valide SQL> GRANT READ ON DIRECTORY TEST TO Pack95; Autorisation de privilèges (GRANT) acceptée.
:cry:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 SQL> DECLARE 2 f_file_id UTL_FILE.FILE_TYPE; 3 v_line VARCHAR2(4000); 4 BEGIN 5 f_file_id := UTL_FILE.FOPEN('TEST','numero.txt','r'); 6 UTL_FILE.GET_LINE(f_file_id,v_line); 7 DBMS_OUTPUT.PUT_LINE(v_line); 8 END; 9 / DECLARE * ERREUR à la ligne 1 : ORA-06510: PL/SQL : exception définie par l'utilisateur non traitée ORA-06512: à "SYS.UTL_FILE", ligne 98 ORA-06512: à "SYS.UTL_FILE", ligne 157 ORA-06512: à ligne 5
je me demande si TEST n'est pas un mot réservé :?
Tu es bien connecté SYSTEM pour la création et le grant ?
J'ai tester avec SYS et SYSTEM
Et j'ai aussi tester un autre nom que TEST.
A koi sert UTL_FILE_DIR ??
à rien à partir de la 8i, sinon c'est ce qui existait à la place de DIRECTORY ;)
Alors sous DOS sur le serveur fait :
et donne le résultat ;)Code:
1
2
3
4 dir /q D:\ORA817\TEST echo %USERNAME% echo toto > D:\ORA817\TEST\toto.txt dir /q D:\ORA817\TEST\toto.txt
Code:
1
2
3
4
5
6
7
8
9
10 dir /q D:\ORA817\TEST : 26/05/2004 13:57 4 BUILTIN\Administrateurnumero.txt echo %USERNAME% : onduleur dir /q D:\ORA817\TEST\toto.txt : 26/05/2004 15:39 7 BUILTIN\Administrateurtoto.txt
8O USERNAME=onduleur... c'est quoi ce délire ?
c mon user que je peut utiliser sur le serveur, il est dans le groupe d'administrateur au point de vue active directory.
est-ce que c'est avec ce user que tu as créé et lancé la base ?
Dans le service Oracle tu vois le user qui lance la base ;)
Non c pas ce user qui a crée et lancé la base c le user 'Administrateur'
ca serait ca l'erreur? pourtant le user que j'utilise est dans le meme groupe de securité que l'administrateur.
non mais je viens de voir que les répertoire sont bien à Administrateurs donc c'est OK.
Le répertoire serait pas en lecture seule ou avec des droits restreints (cf propriétés)
non pas de lecture seule ni de droits restreints.
ça dit quoi ça :
Code:
1
2
3
4
5
6
7
8
9
10
11 DECLARE f_file_id UTL_FILE.FILE_TYPE; v_line VARCHAR2(4000); BEGIN f_file_id := UTL_FILE.FOPEN('TEST','numero.txt','r'); UTL_FILE.GET_LINE(f_file_id,v_line); DBMS_OUTPUT.PUT_LINE(v_line); EXCEPTION WHEN OTHERS THEN dbms_output.put_line(SQLERRM); END; /
que contient la 1° ligne du fichiers ?
le mot testlecture
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 SQL> DECLARE 2 f_file_id UTL_FILE.FILE_TYPE; 3 v_line VARCHAR2(4000); 4 BEGIN 5 f_file_id := UTL_FILE.FOPEN('TEST','numero.txt','r'); 6 UTL_FILE.GET_LINE(f_file_id,v_line); 7 DBMS_OUTPUT.PUT_LINE(v_line); 8 EXCEPTION 9 WHEN OTHERS THEN dbms_output.put_line(SQLERRM); 10 END; 11 / Procédure PL/SQL terminée avec succès.
N'oubliez pas de taper :
Sous Sql*Plus avant d'exécuter votre block PL/SQLCode:SET SERVEROUTPUT ON
Reponse :
Code:User-Defined Exception
8O c'est incroyable ça :-?
Bon on va essayer sur un exemple vraiment basique, que donne le résulltat des lignes suivantes :
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 CREATE OR REPLACE DIRECTORY MONREP AS 'C:\'; GRANT READ, WRITE ON DIRECTORY MONREP TO public; DECLARE f_file_id UTL_FILE.FILE_TYPE; v_line VARCHAR2(4000); BEGIN f_file_id := UTL_FILE.FOPEN('MONREP','numero.txt','a'); UTL_FILE.PUT_LINE(f_file_id,'abcdefghijklmnopqrstuvwxyz'); UTL_FILE.FCLOSE (f_file_id); f_file_id := UTL_FILE.FOPEN('MONREP','numero.txt','r'); UTL_FILE.GET_LINE(f_file_id,v_line); DBMS_OUTPUT.PUT_LINE(v_line); UTL_FILE.FCLOSE (f_file_id); EXCEPTION WHEN OTHERS THEN dbms_output.put_line(SQLERRM); UTL_FILE.FCLOSE_ALL; END; /
Veuillez trapper les exceptions suivantes :
INVALID_PATH La directorie ou le nom de fichier est invalide
INVALID_MODE Mode d'ouverture invalide pour la fonction FOPEN
INVALID_FILEHANDLE Pointeur de fichier invalide
INVALID_OPERATION Le fichier ne peut être ouvert ou manipulé
READ_ERROR Erreur système pendant une opération de lecture
WRITE_ERROR Erreur système pendant une opération d'écriture
INTERNAL_ERROR Erreur PL/SQL non spécifiée
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 CREATE OR REPLACE DIRECTORY MONREP AS 'C:\'; GRANT READ, WRITE ON DIRECTORY MONREP TO public; SQL> CREATE OR REPLACE DIRECTORY MONREP AS 'C:\'; Répertoire créé. SQL> GRANT READ, WRITE ON DIRECTORY MONREP TO public; GRANT READ, WRITE ON DIRECTORY MONREP TO public * ERREUR à la ligne 1 : ORA-22928: privilège sur répertoires non valide SQL> SQL> DECLARE 2 f_file_id UTL_FILE.FILE_TYPE; 3 v_line VARCHAR2(4000); 4 BEGIN 5 f_file_id := UTL_FILE.FOPEN('MONREP','numero.txt','a'); 6 UTL_FILE.PUT_LINE(f_file_id,'abcdefghijklmnopqrstuvwxyz'); 7 UTL_FILE.FCLOSE (f_file_id); 8 9 f_file_id := UTL_FILE.FOPEN('MONREP','numero.txt','r'); 10 UTL_FILE.GET_LINE(f_file_id,v_line); 11 DBMS_OUTPUT.PUT_LINE(v_line); 12 UTL_FILE.FCLOSE (f_file_id); 13 14 EXCEPTION 15 WHEN OTHERS 16 THEN 17 dbms_output.put_line(SQLERRM); 18 UTL_FILE.FCLOSE_ALL; 19 END; 20 / User-Defined Exception Procédure PL/SQL terminée avec succès.
ORA-22928: privilège sur répertoires non valide 8O c'est pas vrai :(
sheik -> là c'est pas utile pour le moment, c'est pas l'exception qui est généré de toute façon :?