Funkcje tworzenia i zamykania połączeń - informacje podstawowe

Można dla aplikacji Publisher zdefiniować funkcje PL/SQL, które będą wykonywane podczas nawiązywania połączenia ze źródłem danych JDBC (funkcja przed przetwarzaniem) lub po zamknięciu połączenia (funkcja po przetwarzaniu).

Każda z tych funkcji musi zwracać wartość logiczną. Mechanizm ten jest obsługiwany tylko dla baz danych Oracle.

Administrator, korzystając z tych dwóch funkcji, może ustawić atrybuty kontekstowe użytkownika, zanim zostanie nawiązane połączenie z bazą danych, a później może te atrybuty wyłączyć, gdy połączenie zostanie zamknięte przez motor ekstrakcji.

Do przekazywania nazwy użytkownika do wywołań funkcji PL/SQL można użyć zmiennej wiązania :xdo_user_name. Ustawiając w ten sposób kontekst logowania użytkownika, można zabezpieczyć dane na poziomie źródła danych (zamiast na poziomie zapytania SQL).

Na przykład rozważmy następująca przykładową funkcję:

FUNCTION set_per_process_username (username_in IN VARCHAR2)
   RETURN BOOLEAN IS
     BEGIN
     SETUSERCONTEXT(username_in);
     return TRUE;
   END set_per_process_username

Aby ta funkcja była wywoływana przy każdym nawiązywaniu połączenia z bazą danych, należy w polu Funkcja przed przetwarzaniem wpisać: set_per_process_username(:xdo_user_name)

Innym przykładem użycia może być wstawanie wiersza do tabeli LOGTAB przy każdym połączeniu się lub rozłączeniu użytkownika:

CREATE OR REPLACE FUNCTION BIP_LOG (user_name_in IN VARCHAR2, smode IN VARCHAR2) 
RETURN BOOLEAN AS
   BEGIN
   INSERT INTO LOGTAB VALUES(user_name_in, sysdate,smode);
   RETURN true;
   END BIP_LOG;

W polu Funkcja przed przetwarzaniem należy wpisać: BIP_LOG(:xdo_user_name)

Gdy zostanie nawiązane nowe połączenie z bazą danych, zostanie ono zarejestrowane w tabeli LOGTAB. Wartość SMODE określa działanie jako wejście lub wyjście. Wywołując tę funkcję jako funkcję po przetwarzaniu, uzyskuje się wyniki podobne do pokazanych w poniższej tabeli.