2011-10-17 24 views
5

Esto debería ser bastante sencillo pero las palabras de búsqueda son tan comunes que no encuentro una respuesta:¿Cómo cargo las variables del sistema operativo en PL/SQL?

Q. ¿Cómo puedo cargar los valores de una variable del sistema operativo (RHEL) en PL/SQL en un Oracle 11g ¿base de datos?

Código:

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

El procedimiento funciona bien si pongo en una dirección de correo electrónico, pero hay una variable llamada $ MAIL_LIST sistema que contiene un grupo de personas. También puedo confirmar que esto está funcionando en otros servidores, pero estoy configurando un reemplazo.

Gracias de antemano y lo siento si la pregunta es demasiado simple!

+0

La variable $ MAIL_LIST está disponible en la línea de comandos para el usuario del sistema operativo que inició la base de datos Oracle. – user739866

+0

¿Qué está haciendo su procedimiento? Basado en el nombre del paquete, supongo que tiene algún tipo de procedimiento externo declarado. Eso implica que PL/SQL llama a un procedimiento externo escrito en C (o algo que expone una interfaz C) e implica que la resolución de la variable de entorno se realiza en ese procedimiento externo, no en PL/SQL. Si ese es el caso, tendríamos que averiguar cómo se define e implementa el procedimiento externo. ¿En qué parte de tu entorno se está poblando esta variable de entorno? –

+0

El PL/SQL está llamando a un comando de shell como se muestra a continuación: shell ('echo' Asunto: '|| REPLACE (p_subject,' "',' \" ') || CHR (10) || l_body || '"| sendmail' || p_recipient); Necesito probar la respuesta a continuación para ver si funciona o no. – user739866

Respuesta

7

Puede acceder a las variables de entorno a través del getenv method en Java System class. Para invocar esto desde PL/SQL, puede crear un procedimiento almacenado Java de la siguiente manera:

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

Ahora, se puede escribir el código PL/SQL de la siguiente manera:

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

El procedimiento almacenado puede también existe dentro de un paquete PL/SQL (si no desea crear una función de nivel de esquema solo para adquirir variables de entorno).

Cuestiones relacionadas