View Full Version : [PL/SQL] Oracle e variabile d'ambiente Unix
trallallero
20-02-2007, 09:20
Sto usando il package UTL_FILE di Oracle per scrivere un file di log da un PL/SQL ma quando passo il path alla funzione FOPEN mi da l'eccezione UTL_FILE.INVALID_PATH.
Giustamente, perché gli sto passando un path che non é assoluto.
Quindi come faccio ad ottenere il valore di una variabile d'ambiente del SO da Oracle ?
in questo caso per esempio sarebbe la variabile $PATH_GIUSTO che contiene il path corretto.
Grazie :)
trallallero
20-02-2007, 11:40
Come non detto:
dal manuale 8i PL/SQL Packages Raference.pfd
Server Security Server security for PL/SQL file I/O consists of a restriction on the directories that can be accessed. Accessible directories must be specified in the instance parameter initialization file (INIT.ORA). Specify the accessible directories for the UTL_FILE functions in the initialization file using the UTL_FILE_DIR parameter. For example: UTL_FILE_DIR = <directory name>
Se qualcuno comunque sa come ottenere il valore di una variabile d'ambiente da sql é cosa gradita.
Come non detto:
Se qualcuno comunque sa come ottenere il valore di una variabile d'ambiente da sql é cosa gradita.
potresti usare questi comandi:
select * from v$parameter (ma mi pare che l'utente debba avere il privilegio DBA)
show parameter <parametro> (es. nls_date_format)
occhio che non tutti gli editor sql (toad in primis) rispondono al comando show parameter, devi usare un sqlplus "standard" ;)
trallallero
20-02-2007, 15:59
potresti usare questi comandi:
select * from v$parameter (ma mi pare che l'utente debba avere il privilegio DBA)
show parameter <parametro> (es. nls_date_format)
grazie ma ...
SQL> SELECT * FROM all_objects WHERE lower(object_name) LIKE '%v$parameter%';
OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID
------------------------------ ------------------------------ ------------------------------ ---------- --------------
OBJECT_TYPE CREATED LAST_DDL_ TIMESTAMP STATUS T G S
------------------ --------- --------- ------------------- ------- - - -
PUBLIC GV$PARAMETER 915
SYNONYM 22-FEB-03 22-FEB-03 2003-02-22:00:09:15 VALID N N N
PUBLIC GV$PARAMETER2 917
SYNONYM 22-FEB-03 22-FEB-03 2003-02-22:00:09:16 VALID N N N
PUBLIC V$PARAMETER 549
SYNONYM 22-FEB-03 22-FEB-03 2003-02-22:00:08:34 VALID N N N
PUBLIC V$PARAMETER2 551
SYNONYM 22-FEB-03 22-FEB-03 2003-02-22:00:08:34 VALID N N N
SQL> desc V$PARAMETER
ERROR:
ORA-04043: object SYS.V_$PARAMETER does not exist
solo sinonimi :wtf:
occhio che non tutti gli editor sql (toad in primis) rispondono al comando show parameter, devi usare un sqlplus "standard" ;)
su quello non c'é problema, lavoro su Unix ;) Toad é pura fantascienza qui
grazie ma ...
SQL> SELECT * FROM all_objects WHERE lower(object_name) LIKE '%v$parameter%';
OWNER OBJECT_NAME SUBOBJECT_NAME OBJECT_ID DATA_OBJECT_ID
------------------------------ ------------------------------ ------------------------------ ---------- --------------
OBJECT_TYPE CREATED LAST_DDL_ TIMESTAMP STATUS T G S
------------------ --------- --------- ------------------- ------- - - -
PUBLIC GV$PARAMETER 915
SYNONYM 22-FEB-03 22-FEB-03 2003-02-22:00:09:15 VALID N N N
PUBLIC GV$PARAMETER2 917
SYNONYM 22-FEB-03 22-FEB-03 2003-02-22:00:09:16 VALID N N N
PUBLIC V$PARAMETER 549
SYNONYM 22-FEB-03 22-FEB-03 2003-02-22:00:08:34 VALID N N N
PUBLIC V$PARAMETER2 551
SYNONYM 22-FEB-03 22-FEB-03 2003-02-22:00:08:34 VALID N N N
SQL> desc V$PARAMETER
ERROR:
ORA-04043: object SYS.V_$PARAMETER does not exist
solo sinonimi :wtf:
si in effetti ho sbagliato io, stavo ripostando per correggere l'errore ma evidentemente la mia castroneria si tramaderà ai posteri ;)
su quello non c'é problema, lavoro su Unix ;) Toad é pura fantascienza qui
in effetti...
Secondo me hai due possibilità:
1) ti metti il valore della variabile d'ambiente da qualche parte nel db (una tabella, una variabile nel package pl/sql, ecc...)
2) chiami una procedura esterna (java o c) come descritto nel manuale (pl/sql user guide, capitolo 8 al paragrafo "Calling External Subprograms")
trallallero
21-02-2007, 07:24
si in effetti ho sbagliato io, stavo ripostando per correggere l'errore ma evidentemente la mia castroneria si tramaderà ai posteri ;)
e invece non hai sbagliato ma sono stato superficiale io ;)
Mi son connesso come DBA e ... voilá:
SQL> desc SYS.V_$PARAMETER
Name Null? Type
------------------------------------------------------------------------ -------- -------------------------------------------------
NUM NUMBER
NAME VARCHAR2(64)
TYPE NUMBER
VALUE VARCHAR2(512)
ISDEFAULT VARCHAR2(9)
ISSES_MODIFIABLE VARCHAR2(5)
ISSYS_MODIFIABLE VARCHAR2(9)
ISMODIFIED VARCHAR2(10)
ISADJUSTED VARCHAR2(5)
DESCRIPTION VARCHAR2(64)
Comunque non é la tabella giusta ma ne ho trovate tante che potrebbero esserlo ... indagheró.
Grazie dell'input :D
trallallero
21-02-2007, 07:39
Secondo me hai due possibilità:
1) ti metti il valore della variabile d'ambiente da qualche parte nel db (una tabella, una variabile nel package pl/sql, ecc...)
2) chiami una procedura esterna (java o c) come descritto nel manuale (pl/sql user guide, capitolo 8 al paragrafo "Calling External Subprograms")
eh la peppa! :eek:
tu dici che Oracle non ha ci da la possibilita di ottenere il valore di una variabile senza fare tutto sto casino ??? :mbe:
Da C posso fare l'embedded pl/sql e non posso fare il contrario ?
Non mi sembra che per Oracle sia un problema andare ad interrogare il SO, per esempio:
SQL> host(echo $PATH)
funziona e ti stampa il contenuto della variabile PATH.
Comunque grazie, quella parte sul java da Oracle é interessante :)
Da C posso fare l'embedded pl/sql e non posso fare il contrario ?
Non ho mai fatto una cosa del genere. Ma da quanto ho letto in giro l'unico modo di fare il contrario è chiamare una procedura esterna come descritto nel manuale.
trallallero
21-02-2007, 13:03
Non ho mai fatto una cosa del genere. Ma da quanto ho letto in giro l'unico modo di fare il contrario è chiamare una procedura esterna come descritto nel manuale.
vabbuó ... grazie :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.