Esempio: Importa dati tra tabelle


La procedura sposta dati da una tabella sorgente, presente su altro db, ad una di destinazione facendo attenzione che non ci siano dati duplicati.
CREATE OR REPLACE PROCEDURE importa_soggetto_da_tabella  IS
n_read NUMBER;
n_add NUMBER;
v_error_code NUMBER;
v_error_msg VARCHAR2(512);
rowcount NUMBER;
var NUMBER;
-- il cursore punta a tutte le tuple della tabella di partenza non ancora presenti in quella di destinazione.
CURSOR cur1 IS
SELECT TRIM(ID_soggetto) as sogg, c_SOGGETTO, c_tipo_uff, c_ufficio
FROM  SOGGETTO_PART@DB_SOGGETTO  --dblink: la tabella SOGGETTO_PART è su un alto db
WHERE  C_SERVIZIO = 'WEB'
AND (C_ID_soggetto like 'A%' OR C_ID_soggetto like 'B%')
minus
SELECT TRIM(SA_soggetto) , trim(to_char(SA_CODICE_SOGGETTO,'00000')) as COD_SOGGETTO, SA_TIPO_UFF, SA_UFFICIO
FROM SOGGETTO_DEST
WHERE SA_soggetto like 'E%' OR SA_soggetto like 'X%';

BEGIN
n_read := 0;
n_add := 0;
    FOR rec IN cur1 LOOP
        n_read := n_read+1;
        SELECT COUNT(*) into rowcount
        FROM SOGGETTO_DEST
        WHERE SA_soggetto = rec.sogg
        AND SA_CODICE_SOGGETTO = rec.c_SOGGETTO
        AND SA_TIPO_UFF = rec.c_tipo_uff
        AND SA_UFFICIO = rec.c_ufficio;

        IF rowcount = 0 THEN  
            var := 1;
            WHILE var < 8 LOOP
                INSERT INTO SOGGETTO_DEST (SA_soggetto, SA_CODICE_SOGGETTO, SA_TIPO_UFF, SA_UFFICIO, SA_CODICE_FUNZIONE, SA_ABILITATO)
                VALUES (rec.sogg, rec.c_SOGGETTO, rec.c_tipo_uff, rec.c_ufficio, var, 1);
                n_add := n_add+1;
                var := var + 1;
            END LOOP;
        END IF;
      
    END LOOP;

EXCEPTION
    WHEN OTHERS THEN BEGIN
        v_error_code := SQLCODE; 
        v_error_msg := SQLERRM;
        IF cur1%ISOPEN THEN CLOSE cur1;
        END IF;
        raise_application_error(-20001,'mdr4_import_soggetto_from_geu-ERRORE -  '||SQLCODE||' -ERROR- '||SQLERRM);
    END;  
END importa_soggetto_da_tabella;

Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione