Creato da pastuweb.com
Share My Page
My Social Accounts
Account FaceBook Account LinkedIn Account Twitter Account Google Plus Account Git Hub
Questo esempio mostra l'utilizzo di un Trigger per l'allineamento di due tabelle di due DB Oracle con Utenti diversi. 
 
In questo esempio ipotizzo che i due utenti siano sotto lo stesso SID e che il loro nomi siano :
  • UT_ESTERNO (database principale)
  • UT_LIFERAY (database di Liferay)
Prima cosa bisogna abilitare l'utente UT_LIFERAY a scrivere (fare delle INSERT e UPDATE)  ed a interrogare (SELECT) le tabelle del secondo utente: UT_ESTERNO.
 
GRANT ALL ON UT_CLASSICO.DB_RUOLI TO UT_LIFERAY;
GRANT ALL ON UT_CLASSICO.DB_UTENTIRUOLI TO UT_LIFERAY;
 
Dopodicè si può passare alla scrittura del Trigger.
Questo Trigger scatta ad ogni INSERT di una tupla. Non fa altro che prendere il "name" del record appena inserito in ROLES_ di Liferay ed  utilizzarlo nel costrutto where della seconda query, quella che recupera il COD_RUOLO della tabella DB_RUOLI dell'utente UT_CLASSICO. Una volta recuperato il COD_RUOLO va a fare un INSERT nella tabella DB_UTENTIRUOLI dell'utente UT_CLASSICO.
 
In questo modo la tabella DB_UTENTIRUOLI e ROLES_ sono allineate. (ooviamente in questo caso solo in ISNERT).
 
 
CREATE OR REPLACE TRIGGER UT_LIFERAY.USERS_ROLES_INSERT 
  AFTER INSERT ON UT_LIFERAY.USERS_ROLES   REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
 
DECLARE
 
  var_ruolo UT_LIFERAY.ROLE_.name%type;
  var_cod_ruolo UT_CLASSICO.APINH_RUOLI.COD_RUOLO%type;
  
BEGIN
 
  -- ottengo il nome del ruolo dal db di Liferay
  begin
    select ruoli.NAME
      into var_ruolo
      from UT_LIFERAY.ROLE_ ruoli
     where RUOLI.ROLEID = :NEW.roleid;   
  exception
    when others then
      null;
  end;
  
  begin 
    select ruoli.COD_RUOLO
      into var_cod_ruolo
      from UT_CLASSICO.DB_RUOLI ruoli
     where ruoli.descrizione = var_ruolo; 
  exception
    when others then
      null;
  end;
                           
  
  insert into UT_CLASSICO.DB_UTENTIRUOLI
    (id_utente,
     cod_ruolo)
  values
    (:NEW.userid,
     var_cod_ruolo);
END;
/
 
 
Average (1 Vote)
The average rating is 5.0 stars out of 5.