sql >> Databáze >  >> RDS >> Oracle

Procedura UTL_FILE.FOPEN() nepřijímá cestu k adresáři?

Od Oracle 9i existují dva způsoby, jak deklarovat adresář pro použití s ​​UTL_FILE.

Starší způsob je nastavení parametru INIT.ORA UTL_FILE_DIR. Aby se změna projevila, musíme restartovat databázi. Hodnota se může podobat jakékoli jiné proměnné PATH; přijímá zástupné znaky. Použití tohoto přístupu znamená předání cesty k adresáři...

UTL_FILE.FOPEN('c:\temp', 'vineet.txt', 'W');

Alternativním přístupem je deklarace objektu adresáře.

create or replace directory temp_dir as 'C:\temp'
/

grant read, write on directory temp_dir to vineet
/

Objekty adresáře vyžadují přesnou cestu k souboru a nepřijímají zástupné znaky. V tomto přístupu předáme název objektu adresáře...

UTL_FILE.FOPEN('TEMP_DIR', 'vineet.txt', 'W');

UTL_FILE_DIR je zastaralý, protože je ze své podstaty nezabezpečený – všichni uživatelé mají přístup ke všem adresářům OS zadaným v cestě, zatímco oprávnění ke čtení a zápisu mohou být jednotlivým uživatelům udělena diskrétně. Pomocí objektů Directory můžeme také přidávat, odebírat nebo měnit adresáře, aniž by došlo k opuštění databáze.

V obou případech oracle Uživatel OS musí mít oprávnění pro čtení a zápis v adresáři OS . V případě, že to není zřejmé, znamená to, že adresář musí být viditelný z databázového serveru . Nemůžeme tedy použít ani jeden přístup k vystavení adresáře na našem lokálním PC procesu běžícímu na vzdáleném databázovém serveru. Soubory musí být nahrány na databázový server nebo sdílený síťový disk.

Pokud oracle Uživatel OS nemá příslušná oprávnění k adresáři OS nebo pokud cesta zadaná v databázi neodpovídá skutečné cestě, program vyvolá tuto výjimku:

ORA-29283: invalid file operation
ORA-06512: at "SYS.UTL_FILE", line 536
ORA-29283: invalid file operation
ORA-06512: at line 7

Text OERR pro tuto chybu je celkem jasný:

29283 -  "invalid file operation"
*Cause:    An attempt was made to read from a file or directory that does
           not exist, or file or directory access was denied by the
           operating system.
*Action:   Verify file and directory access privileges on the file system,
           and if reading, verify that the file exists.


  1. ERROR 2002 (HY000):Nelze se připojit k místnímu serveru MySQL přes soket '/var/run/mysqld/mysqld.sock' (2)

  2. nelze vytvořit autoinkrementační primární klíč pomocí flask-sqlalchemy

  3. Jak zobrazit závislosti objektů v Accessu 2016

  4. Jak pracovat s datovými funkcemi v Oracle sql