UTL_FILE.FOPEN () - Prozedur akzeptiert Pfad für Verzeichnis nicht?
Ich versuche zu schreiben in eine Datei gespeichert in c:\ Laufwerk mit der Bezeichnung vin1.txt
und immer diese Fehlermeldung .Bitte vorschlagen!
> 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
HIER ist der 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
InformationsquelleAutor der Frage Vineet | 2010-05-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Seit Oracle 9i gibt es zwei Möglichkeiten, oder deklarieren Sie ein Verzeichnis für die Verwendung mit UTL_FILE.
Den älteren Weg die INIT.ORA-parameter UTL_FILE_DIR. Wir haben zu starten Sie die Datenbank neu, damit die änderungen wirksam werden. Der Wert kann wie jede andere variable PATH; es akzeptiert Platzhalter. Mit diesem Ansatz bedeutet, dass die Weitergabe der Verzeichnis-Pfad...
Der alternative Ansatz ist zu erklären, ein directory-Objekt.
Directory-Objekte benötigen die genauen Datei-Pfad, und nicht akzeptieren wildcards. In diesem Ansatz, den wir passieren die directory-Objekt name...
Den UTL_FILE_DIR ist veraltet, weil es von Natur aus unsicher - alle Nutzer haben Zugriff auf alle OS angegebenen Verzeichnisse in dem Pfad, in der Erwägung, dass lese-und Schreibberechtigungen können de gewährt, die diskret an die einzelnen Benutzer. Auch mit Verzeichnis-Objekten, wir können hinzufügen, entfernen oder ändern Sie die Verzeichnisse ohne Prellen der Datenbank.
In jedem Fall, die
oracle
OS-Benutzer muss über lese-und/oder Schreibrechte auf das Betriebssystem-Verzeichnis. Falls es nicht offensichtlich ist, bedeutet dies das Verzeichnis muss sichtbar sein, aus der Datenbank server. So können wir entweder Ansatz verwenden, setzen Sie ein Verzeichnis auf unserem lokalen PC auf einen Laufenden Prozess auf einem remote Datenbank-server. Dateien, die hochgeladen werden müssen, um die Datenbank-server oder auf einem freigegebenen Netzlaufwerk.Wenn die
oracle
OS Benutzer nicht die entsprechenden Berechtigungen auf das Betriebssystem-Verzeichnis, oder, wenn der angegebene Pfad in der Datenbank nicht übereinstimmen, um eine tatsächliche Pfad, so wird das Programm schleudern diese Ausnahme:Des OERR-text für diese Fehlermeldung ist ziemlich eindeutig:
InformationsquelleAutor der Antwort APC
Vergessen Sie nicht auch, dass der Pfad für die Datei ist auf der aktuellen oracle-server-Maschine, und nicht eine lokale Entwicklung der Maschine, die möglicherweise aufrufen der gespeicherten Prozedur. Dies ist wahrscheinlich sehr offensichtlich, aber etwas, das in Erinnerung bleiben sollte.
InformationsquelleAutor der Antwort Josh P
Müssen Sie register Verzeichnis mit Oracle. fopen nimmt den Namen eines Verzeichnis-Objekt, nicht den Pfad. Zum Beispiel:
(müssen Sie möglicherweise melden Sie sich als SYS ausführen)
Dann finden Sie es in dem Aufruf von fopen:
InformationsquelleAutor der Antwort Jeffrey Kemp
Für utl_file.open(Speicherort,Dateiname,Modus) , müssen wir Verzeichnisses für den Standort, aber nicht Weg. Zum Beispiel:DATA_FILE_DIR , dies ist der name des Verzeichnisses und überprüfen Sie die Verzeichnis-Pfad für die jeweilige Verzeichnis-Namen.
InformationsquelleAutor der Antwort sujini
Müssen Sie Ihre DBA-ändern Sie die init.ora-Datei, indem man das Verzeichnis, das Sie zugreifen möchten, um die 'utl_file_dir' parameter. Ihre Datenbank-Instanz muss dann beendet und neu gestartet werden, weil init.ora ist schreibgeschützt wenn die Datenbank hochgefahren wird.
Können Sie anzeigen (aber nicht ändern) dieser parameter durch ausführen der folgenden Abfrage:
Teilen und genießen.
InformationsquelleAutor der Antwort Bob Jarvis
Den Namen des Verzeichnisses scheint zu sein, groß-und Kleinschreibung. Ich Stand vor dem gleichen Problem, aber wenn ich das Verzeichnis name in Großbuchstaben, es funktionierte.
InformationsquelleAutor der Antwort Shafqat Ali