2011-10-17 6 views
5

To powinno być dość proste, ale wyszukiwane słowa są tak częste, że nie znajduję odpowiedzi:Jak załadować zmienne OS do PL/SQL?

P. Jak wczytać wartości ze zmiennej systemu operacyjnego (RHEL) do PL/SQL na Oracle 11g Baza danych?

Kod:

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

Procedura działa dobrze, jeśli mogę umieścić w adresie e-mail, ale nie jest zmienną systemową o nazwie $ MAIL_LIST który zawiera grupę ludzi. Mogę również potwierdzić, że działa to na innych serwerach, ale instaluję zamiennik.

Z góry dziękuję i przepraszam, jeśli pytanie jest zbyt proste!

+0

Zmienna $ MAIL_LIST jest dostępna w wierszu poleceń dla użytkownika systemu operacyjnego, który uruchomił bazę danych Oracle. – user739866

+0

Co robi twoja procedura. Na podstawie nazwy pakietu, zgaduję, że masz zadeklarowaną procedurę zewnętrzną. Oznacza to, że PL/SQL wywołuje zewnętrzną procedurę napisaną w C (lub coś, co eksponuje interfejs C) i sugeruje, że rozdzielczość zmiennej środowiskowej jest wykonywana w tej zewnętrznej procedurze, a nie w PL/SQL. W takim przypadku musielibyśmy ustalić, w jaki sposób definiuje się i wdraża procedurę zewnętrzną. Gdzie w twoim otoczeniu jest ta zmienna środowiskowa? –

+0

PL/SQL wywołuje polecenie powłoki, jak pokazano poniżej: shell ('echo "Subject:' || REPLACE (p_subject, '"', '\ "') || CHR (10) || l_body || "" | sendmail '|| p_recipient); Muszę wypróbować odpowiedź poniżej, aby sprawdzić, czy działa, czy nie. – user739866

Odpowiedz

7

Możesz uzyskać dostęp do zmiennych środowiskowych poprzez getenv method w Java System class. Aby wywołać ten z PL/SQL, można utworzyć procedurę przechowywaną Java w następujący sposób:

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

Teraz można napisać kod PL/SQL, co następuje:

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

Procedura składowana może także istnieją wewnątrz pakietu PL/SQL (jeśli nie chcesz tworzyć funkcji poziomu schematu tylko w celu pozyskania zmiennych środowiskowych).

Powiązane problemy