Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /membri/oraclefaq/qa-include/qa-db.php on line 66
Utente VTABEL74 - Oracle FAQ - Il forum italiano su oracle

Utente VTABEL74

Membro da: 2 anni
Tipologia: Utente registrato
Privilegi extra: Fare una domanda
Nome completo:
Località:
Website:
About:

Attività da VTABEL74

Punteggio: 120 punti (posizione in classifica #11)
Quesiti: 0
Risposte: 0
Commenti: 0
Votato il: 0 domande, 0 risposte
Emessi: 0 voti positivi, 0 voti negativi
Ricevuto: 0 voti positivi, 0 voti negativi

Bacheca di VTABEL74

log in o registrati per scrivere un messaggio in bacheca.
Ciao, VTABEL74 ti ho dato i permessi per poter creare la domanda pubblicamente. Ora dovresti riuscire ad inserirla in home page.
19 Settembre 2015 da carlo10
salve a tutti , 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
...