Bacheca di carlo10

log in o registrati per scrivere un messaggio in bacheca.
Non è possibile fare copia ed incolla nel caso si volesse inserire  il codice ?
23 Settembre 2015 da VTABEL74
salve  , ho il seguente blocco anonimo    :
 DECLARE
    CURSOR curs
    IS
       SELECT DISTINCT case_id_li
                  FROM insert_job_sedi_temp;

    l   curs%ROWTYPE;
    n   INTEGER        := 0;
 BEGIN
    OPEN curs;

    LOOP
       FETCH curs
        INTO l;

       EXIT WHEN curs%NOTFOUND;

       EXECUTE IMMEDIATE 'TRUNCATE TABLE CURS_TABLE';

       INSERT INTO curs_table
                   (case_id_li, sede_new, dt_fine, dt_inizio)
          SELECT   case_id_li, sede_new, dt_fine, dt_inizio
              FROM crma.insert_job_sedi_temp
             WHERE sede_new IS NOT NULL AND case_id_li = l.case_id_li
          ORDER BY case_id_li, dt_inizio;

       FOR m IN
          (SELECT   case_id_li, sede_new, dt_inizio,
                    NVL
                       (LEAD (dt_inizio) OVER (PARTITION BY case_id_li ORDER BY case_id_li,
                         dt_inizio),
                        '01-GEN-2100'
                       ) succ_dt_inizio,
                    dt_fine
               FROM crma.curs_table
              WHERE case_id_li = l.case_id_li
           ORDER BY case_id_li, dt_inizio)
       LOOP
          UPDATE /*+parallel(4)*/ insert_job_sedi
             SET sede_new = m.sede_new
           WHERE case_id_li = m.case_id_li
             AND sede_new IS NULL
             AND dt_inizio < m.succ_dt_inizio;
       END LOOP;

       IF n = 100
       THEN
          COMMIT;
          n := 0;
       END IF;
    END LOOP;

    COMMIT;
 END;

 nel primo cursore prendo i  row:id  della tabella in questione , che è la copia della tabella del cursore implicito che  ha la descrizione delle sedi e delle date di inizio e fine  ,la descrizione non è sempre presente ed io devo aggiornarla valorizzandola nelle righe successive a  null con il  valore  dell'ultima descrizione presente  , siccome che in un row_id ci possono essere più descrizioni ho fatto l'aggiornamento per ogni row_id valorizzando la descrizione dove è null    <  dt_inizio_succ fatto con la funzione lag  nella tabella curs_table cosi quando scorre il cursore aggiorna per la dt_inizio dell' ultima descrizione valida non a null e la dt_inizio della seconda descrizione valida non a null  e cosi  via il problema e che la procedura è un po lenta qualcuno saprebbe dirmi un approccio più veloce  per la procedura in questione .
 Non so se sono stato abbastanza chiaro , comunque grazie in anticipo per un eventuale risposta .
 Saluti Vittorio
17 Settembre 2015 da VTABEL74
Come si fa a ottenere il privilegio di fare una domanda ?
13 Agosto 2015 da music_ale
Benvenuto in Oracle FAQ - Il forum italiano su oracle, dove potrai fare domande e ricevere risposte da altri membri della community.

84 domande

21 risposte

7 commenti

53.4k utenti


...