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.