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 carlo10 - Oracle FAQ - Il forum italiano su oracle

Utente carlo10

Membro da: 3 anni
Tipologia: Super-Amministratore
Privilegi extra: Fare una domanda
Modificare la categoria a una domanda
Modificare una domanda
Modificare una risposta
Modificare un commento
Modifica messaggi senza notificare
Chiudere una domanda
Selezionare risposte per una domanda
Visualizzare indirizzi IP messaggi anonimi
Visulizza chi ha votato o segnalato il messaggio
Approvare o rifiutare messaggi
Nascondere o pubblicare messaggi
Cancellare messaggi nascosti
Nome completo:
Località:
Website:
About:

Attività da carlo10

Punteggio: 1,860 punti (posizione in classifica #1)
Quesiti: 61
Risposte: 13
Commenti: 2
Votato il: 0 domande, 0 risposte
Emessi: 0 voti positivi, 0 voti negativi
Ricevuto: 1 votato positivamente, 0 voti negativi

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
...