UTL_FILE.FOPEN() de la procédure de non-acceptation de chemin d'accès de répertoire?
Je suis en train d'écrire dans un fichier stocké dans le disque c:\ nommée vin1.txt
et comment cette erreur .S'il vous plaît suggérer!
> ERROR at line 1: ORA-29280: invalid
> directory path ORA-06512: at
> "SYS.UTL_FILE", line 18 ORA-06512: at
> "SYS.UTL_FILE", line 424 ORA-06512: at
> "SCOTT.SAL_STATUS", line 12 ORA-06512:
> at line 1
VOICI le code
create or replace procedure sal_status
(
p_file_dir IN varchar2,
p_filename IN varchar2)
IS
v_filehandle utl_file.file_type;
cursor emp Is
select * from employees
order by department_id;
v_dep_no departments.department_id%TYPE;
begin
v_filehandle :=utl_file.fopen(p_file_dir,p_filename,'w');--Opening a file
utl_file.putf(v_filehandle,'SALARY REPORT :GENERATED ON %s\n',SYSDATE);
utl_file.new_line(v_filehandle);
for v_emp_rec IN emp LOOP
v_dep_no :=v_emp_rec.department_id;
utl_file.putf(v_filehandle,'employee %s earns:s\n',v_emp_rec.last_name,v_emp_rec.salary);
end loop;
utl_file.put_line(v_filehandle,'***END OF REPORT***');
UTL_FILE.fclose(v_filehandle);
end sal_status;
execute sal_status('C:\','vin1.txt');--Executing
Vous devez vous connecter pour publier un commentaire.
Depuis Oracle 9i il y a deux façons, ou déclarer un répertoire pour une utilisation avec UTL_FILE.
L'ancienne façon est de mettre de l'INIT.ORA paramètre UTL_FILE_DIR. Nous avons pour redémarrer la base de données pour un changement prenne effet. La valeur peut, comme toute autre variable de CHEMIN d'accès; il accepte des caractères génériques. L'utilisation de cette approche consiste à transmettre le chemin d'accès au répertoire...
L'approche alternative consiste à déclarer un objet d'annuaire.
Répertoire des objets nécessitent l'exact chemin d'accès au fichier, et je n'accepte pas les caractères génériques. Dans cette approche, nous avons pass le répertoire nom de l'objet...
La UTL_FILE_DIR est déconseillée, car elle est par nature précaire - tous les utilisateurs ont accès à tous les OS les répertoires spécifiés dans le chemin, tandis que d'écrire et de lire des privilèges de accordée discrètement à des utilisateurs individuels. Aussi, avec le Répertoire des objets que l'on peut ajouter, supprimer ou modifier les annuaires sans rebondir la base de données.
Dans les deux cas, la
oracle
OS de l'utilisateur doit avoir lu et/ou des droits d'écriture sur le répertoire du système d'exploitation. Dans le cas où il n'est pas évident, cela signifie le répertoire doit être visible à partir de la base de données du serveur de. Donc on ne peut pas utiliser l'une ou l'autre approche pour exposer un répertoire sur nos PC local à un processus en cours d'exécution sur une distance de serveur de base de données. Les fichiers doivent être téléchargés vers le serveur de base de données, ou un lecteur réseau partagé.Si le
oracle
utilisateur de l'OS n'a pas les autorisations appropriées sur le répertoire du système d'exploitation, ou si le chemin d'accès spécifié dans la base de données ne correspond pas à un véritable chemin d'accès, le programme va lancer cette exception:La OERR texte de cette erreur est assez clair:
Ne pas oublier également que le chemin d'accès pour le fichier est sur le serveur oracle de la machine et non pas un local de développement de la machine qui pourrait être l'appel de la procédure stockée. C'est probablement très évident, mais quelque chose qui devrait rester dans les mémoires.
Vous devez s'inscrire au répertoire avec Oracle. fopen prend le nom d'un répertoire d'objets, et non pas le chemin. Par exemple:
(vous devrez peut-être connecter en tant que SYS pour exécuter ces)
Ensuite, vous pouvez vous référer à l'appel à fopen:
Pour utl_file.ouvert(lieu,nom de fichier,mode) , nous avons besoin de donner le nom de répertoire pour l'emplacement, mais pas de chemin d'accès. Par Exemple:DATA_FILE_DIR , c'est le nom du répertoire et de vérifier le chemin d'accès au répertoire pour le nom de répertoire.
Le nom du répertoire semble être sensible à la casse. J'ai connu le même problème mais quand j'ai fourni le nom du répertoire en majuscules, il a travaillé.
Vous devez avoir votre DBA modifier l'init.ora fichier, en ajoutant le répertoire que vous souhaitez accéder à la " utl_file_dir paramètre. Votre instance de base de données devra ensuite être arrêté et redémarré en raison d'init.ora est en lecture uniquement lorsque la base de données est mis en place.
Vous pouvez consulter (mais pas modifier) ce paramètre en exécutant la requête suivante:
De partager et de profiter.