Nella parte I abbiamo visto come trovare le differenze utilizzando le features del prodotto, adesso vediamo come ottenere lo stesso o quasi risultato non utilizzando le funzioni di prodotto.
Partiamo dal presupposto di dover confrontare una tabella posta nel workspace LIVE ed una posta in un workspace figlio di LIVE e di voler estrarre le differenze.
Per estrarre le differenze effettueremo delle minus tra la vista xxx_HIST filtrata per WS=LIVE e la tabella presente nel WS figlio e viceversa. Per semplificare un pò considereremo sulla tabella xxx_HIST solo che le operazioni fatte sul record devono essere diversa da DELETE. Se poi vogliamo estrarre anche i record cancellati o sul WS figlio o sul LIVE basta omettere la condizione nel filtro.
Come primo step ci posizioniamo nel WS figlio verificando che se già non ci siamo:
...
SELECT DBMS_WM.GetWorkspace into v_get_owks FROM DUAL;
IF v_get_owks!=v_owks_child THEN
dbms_wm.GotoWorkspace(v_owks_child);
END IF;
...
A questo punto possiamo fare la prima minus tra ciò che è presente sul LIVE e ciò che è presente nella tabella:
SELECT '||V_TAB_COLUMNS||' FROM
(SELECT A.* ,
ROW_NUMBER ()
OVER (PARTITION BY WM_workspace,'||V_PKEY_COLS||'
ORDER BY WM_workspace,'||V_PKEY_COLS||',
WM_CREATETIME DESC,
NVL(WM_RETIRETIME,TO_DATE(''01019900'',''DDMMYYYY'')) DESC) RW
FROM '||TABLE||'_HIST A)
WHERE RW=1 AND WM_WORKSPACE=''LIVE'' AND WM_OPTYPE<>''D'' AND (:v_where)
MINUS
SELECT '||V_TAB_COLUMNS||' FROM '||TABLE||' WHERE (:v_where)
dove:
V_TAB_COLUMNS sono le colonne della vista senza le colonne di prodotto
V_PKEY_COLS sono le colonne della chiave della tabella
v_where è una eventuale condizione di filtro comune ad entrambe le viste.
Per ottenere le differenze inverse basta invertire la minus.
Questa soluzione tuttavia risulta poco efficiente in quanto è valida solo per i confronti con il WS LIVE.
Quindi anche se possibile utilizzarla la scarterei a priori a favore della soluzione illustrata nell'articolo parte I.
Perchè ne abbiamo parlato? perchè potrebbe essere utile fare un confronto veloce col LIVE e poi avevo scritto la query...
Nessun commento:
Posta un commento