U kunt PL/SQL-functies definiëren voor Publisher, die worden uitgevoerd wanneer een verbinding met een JDBC-gegevensbron tot stand wordt gebracht (voorverwerkingsfunctie) of wordt gesloten (naverwerkingsfunctie).
De functie moet een Boole-waarde retourneren. Deze functie wordt alleen ondersteund voor Oracle databases.
In deze twee velden kan de beheerder de contextattributen van een gebruiker instellen voordat verbinding met een database wordt gemaakt en de attributen vervolgens annuleren nadat de verbinding door de extractie-engine is verbroken.
De systeemvariabele :xdo_user_name kan worden gebruikt als bindvariabele om de gebruikersnaam voor inloggen door te geven aan de PL/SQL-functieoproepen. Als u de gebruikerscontext voor inloggen op deze manier gebruikt, kunt u gegevens op het bronniveau van de gegevens beveiligen (in plaats van op SQL-zoekvraagniveau).
Stel, u hebt de volgende voorbeeldfunctie gedefinieerd:
FUNCTION set_per_process_username (username_in IN VARCHAR2) RETURN BOOLEAN IS BEGIN SETUSERCONTEXT(username_in); return TRUE; END set_per_process_username
Als deze functie telkens moet worden opgeroepen wanneer er verbinding wordt gemaakt met de database, voert u in het veld Voorverwerkingsfunctie het volgende in: set_per_process_username(:xdo_user_name).
Een ander voorbeeld is dat er telkens een rij wordt ingevoegd in de tabel LOGTAB wanneer een gebruiker een verbinding maakt of verbreekt:
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;
Voer in het veld Voorverwerkingsfunctie het volgende in: BIP_LOG(:xdo_user_name).
Wanneer een nieuwe verbinding wordt gemaakt met de database, wordt dit vastgelegd in de tabel LOGTAB. De waarde van SMODE geeft aan of de activiteit een nieuwe verbinding of een afsluiting betreft. Door deze functie ook op te roepen als een naverwerkingsfunctie, worden er resultaten geretourneerd zoals getoond in onderstaande tabel.