2011-10-17 7 views
5

Questo dovrebbe essere abbastanza semplice, ma le parole di ricerca sono così comuni che non sto trovando una risposta:Come caricare variabili OS in PL/SQL?

D. Come faccio a caricare i valori da una variabile di sistema operativo (RHEL) in PL/SQL su un Oracle 11g Banca dati?

Codice:

begin 
dba_utilities.utilities_with_ext_proc.send_email(
     p_recipient => '$MAIL_LIST', 
     p_subject  => 'Subject' 
     p_body  => 'Body 
); 
End ;    

La procedura funziona bene se ho messo in un indirizzo di posta elettronica, ma c'è una variabile di sistema denominata $ MAIL_LIST che contiene un gruppo di persone. Posso anche confermare che funziona su altri server ma sto configurando una sostituzione.

Grazie in anticipo e scusa se la domanda è eccessivamente semplice!

+0

La variabile $ MAIL_LIST è disponibile in riga di comando per l'utente del sistema operativo che ha avviato il database Oracle. – user739866

+0

Cosa sta facendo la tua procedura. Sulla base del nome del pacchetto, suppongo che tu abbia una sorta di procedura esterna dichiarata. Ciò implica che PL/SQL sta chiamando a una procedura esterna scritta in C (o qualcosa che espone un'interfaccia C) e implica che la risoluzione della variabile di ambiente viene eseguita in quella procedura esterna, non in PL/SQL. In questo caso, dovremmo capire come viene definita e implementata la procedura esterna. Dove nel tuo ambiente viene popolata questa variabile di ambiente? –

+0

Il PL/SQL sta chiamando un comando shell come mostrato di seguito: shell ('echo "Oggetto:' || REPLACE (p_subject, '"', '\ "') || CHR (10) || l_body || '"| sendmail' || p_recipient); Ho bisogno di provare la risposta qui sotto per vedere se funziona o no. – user739866

risposta

7

È possibile accedere alle variabili di ambiente tramite getenv method in Java System class. Per richiamare questo da PL/SQL, è possibile creare una stored procedure Java come segue:

CREATE FUNCTION getenv(name VARCHAR2) RETURN VARCHAR2 
    AS LANGUAGE JAVA 
    NAME 'java.lang.System.getenv(java.lang.String) return java.lang.String'; 

Ora, è possibile scrivere il codice PL/SQL come segue:

begin 
dba_utilities.utilities_with_ext_proc.send_email(
     p_recipient => getenv('MAIL_LIST'), 
     p_subject  => 'Subject' 
     p_body  => 'Body 
); 
End ; 

La stored procedure può anche esiste all'interno di un pacchetto PL/SQL (se non si desidera creare una funzione a livello di schema solo per acquisire variabili di ambiente).

Problemi correlati