Pagina 1 di 5 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 47
  1. #1
    Utente di HTML.it L'avatar di Elena78
    Registrato dal
    Oct 2001
    Messaggi
    535

    ORACLE: PL/SQL -- Exception Part II

    Ho creato un'eccezione che, se la seguente SELECT ritorna null esce dal ciclo altrimenti prosegue.

    Però non riesco a capire perchè anche se la select non ritorna null lui esce lo stesso come se la select tornasse 'NO_DATA_FOUND'

    Perchè?? E' sbagliata la sintassi??
    Forse ho sbagliato a posizionare l'END dell' EXCEPTION :master:



    for rc in c3 LOOP

    BEGIN

    SELECT MAX(ID_STORICO) as Max into num from Recall45_debug_storico where colonna5= rc.colonna5;

    EXCEPTION WHEN NO_DATA_FOUND THEN
    EXIT;

    SELECT record_type_new, record_status_new, call_result_new,col_esito_new INTO rc_type_storico,rc_status_storico,c_result_storico , es_storico FROM Recall45_debug_storico WHERE colonna5= rc.colonna5 and id_storico=num;


    IF rc.COL_ESITO = es_storico then /* verifica l esito applicativo, se congruente */
    IF rc.record_type = rc_type_storico and rc.record_status= rc_status_storico and rc.call_result= c_result_storico then
    EXIT;
    END IF;

    ELSE
    DBMS_OUTPUT.PUT_LINE(err ||' ' || rc.COLONNA5 || ' L esito telefonico/applicativo della tabella RECALL_STORICO non coincide con l esito della scheda ON LINE (scheda non in Stale)');
    END IF;
    END IF;
    END;
    END LOOP;


  2. #2
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    codice:
    for rc in c3 LOOP
    
      BEGIN
    
        SELECT MAX(ID_STORICO) as Max into num from Recall45_debug_storico where colonna5= rc.colonna5;
    
      EXCEPTION WHEN NO_DATA_FOUND THEN
        EXIT;
    
      END;
    
      SELECT record_type_new, record_status_new, call_result_new,col_esito_new
      INTO rc_type_storico,rc_status_storico,c_result_storico, es_storico
      FROM Recall45_debug_storico
      WHERE colonna5= rc.colonna5 and id_storico=num;
    
    
      IF rc.COL_ESITO = es_storico then /* verifica l esito applicativo, se congruente */
        IF rc.record_type = rc_type_storico and rc.record_status =  rc_status_storico and rc.call_result = c_result_storico then
          EXIT;
        END IF;
    
      ELSE
        DBMS_OUTPUT.PUT_LINE(err ||' ' || rc.COLONNA5 || ' L''esito telefonico/applicativo della tabella RECALL_STORICO non coincide con l esito della scheda ON LINE (scheda non in Stale)');
      END IF; 
    
    END LOOP;
    prova così :quote: :quote: :quote:

  3. #3
    Utente di HTML.it L'avatar di Elena78
    Registrato dal
    Oct 2001
    Messaggi
    535
    Originariamente inviato da floyd
    codice:
    for rc in c3 LOOP
    
      BEGIN
    
        SELECT MAX(ID_STORICO) as Max into num from Recall45_debug_storico where colonna5= rc.colonna5;
    
      EXCEPTION WHEN NO_DATA_FOUND THEN
        EXIT;
    
      END;
    
      SELECT record_type_new, record_status_new, call_result_new,col_esito_new
      INTO rc_type_storico,rc_status_storico,c_result_storico, es_storico
      FROM Recall45_debug_storico
      WHERE colonna5= rc.colonna5 and id_storico=num;
    
    
      IF rc.COL_ESITO = es_storico then /* verifica l esito applicativo, se congruente */
        IF rc.record_type = rc_type_storico and rc.record_status =  rc_status_storico and rc.call_result = c_result_storico then
          EXIT;
        END IF;
    
      ELSE
        DBMS_OUTPUT.PUT_LINE(err ||' ' || rc.COLONNA5 || ' L''esito telefonico/applicativo della tabella RECALL_STORICO non coincide con l esito della scheda ON LINE (scheda non in Stale)');
      END IF; 
    
    END LOOP;
    prova così :quote: :quote: :quote:


    così va in errore la seconda select quando la trova nulla.

    Ho provato così ma mi da errore per il posizionamento dell'end:
    IF.....................

    BEGIN
    SELECT MAX(ID_STORICO) as Max into num from Recall45_debug_storico where colonna5= rc.colonna5;

    EXCEPTION WHEN NO_DATA_FOUND THEN
    DBMS_OUTPUT.PUT_LINE(ok ||' ' || rc.COLONNA5 || ' Scheda in anteprima');
    EXIT;
    END;

    BEGIN
    SELECT record_type_new, record_status_new, call_result_new,col_esito_new INTO rc_type_storico,rc_status_storico,c_result_storico , es_storico FROM Recall45_debug_storico WHERE colonna5= rc.colonna5 and id_storico=num;
    EXCEPTION WHEN NO_DATA_FOUND THEN

    IF rc.COL_ESITO = es_storico then /* verifica l esito applicativo, se congruente */
    IF rc.record_type = rc_type_storico and rc.record_status= rc_status_storico and rc.call_result= c_result_storico then
    EXIT;
    END IF;

    EXIT;
    END;
    ELSE
    DBMS_OUTPUT.PUT_LINE(err ||' ' || rc.COLONNA5 || ' L esito telefonico/applicativo della tabella RECALL_STORICO non coincide con l esito della scheda ON LINE (scheda non in Stale)');
    END IF;

    END IF;

    END LOOP;

  4. #4
    Utente di HTML.it L'avatar di Elena78
    Registrato dal
    Oct 2001
    Messaggi
    535
    Per quale motivo entra nell'eccezione se la select ritorna un valore??

  5. #5
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    codice:
    for rc in c3 LOOP
    
      BEGIN
    
        SELECT MAX(ID_STORICO) as Max into num from Recall45_debug_storico where colonna5= rc.colonna5;
    
        SELECT record_type_new, record_status_new, call_result_new,col_esito_new
        INTO  rc_type_storico,rc_status_storico,c_result_storico, es_storico
        FROM Recall45_debug_storico
        WHERE colonna5= rc.colonna5 and id_storico=num;
    
    
        IF rc.COL_ESITO = es_storico then /* verifica l esito applicativo, se congruente */
          IF rc.record_type = rc_type_storico and rc.record_status =  rc_status_storico and rc.call_result = c_result_storico then
            EXIT;
          END IF;
    
        ELSE
          DBMS_OUTPUT.PUT_LINE(err ||' ' || rc.COLONNA5 || ' L''esito telefonico/applicativo della tabella RECALL_STORICO non coincide con l esito della scheda ON LINE (scheda non in Stale)');
        END IF; 
    
      EXCEPTION WHEN NO_DATA_FOUND THEN
        EXIT;
    
      END;
    
    END LOOP;

  6. #6
    Utente di HTML.it L'avatar di Elena78
    Registrato dal
    Oct 2001
    Messaggi
    535
    Originariamente inviato da floyd
    codice:
    for rc in c3 LOOP
    
      BEGIN
    
        SELECT MAX(ID_STORICO) as Max into num from Recall45_debug_storico where colonna5= rc.colonna5;
    
        SELECT record_type_new, record_status_new, call_result_new,col_esito_new
        INTO  rc_type_storico,rc_status_storico,c_result_storico, es_storico
        FROM Recall45_debug_storico
        WHERE colonna5= rc.colonna5 and id_storico=num;
    
    
        IF rc.COL_ESITO = es_storico then /* verifica l esito applicativo, se congruente */
          IF rc.record_type = rc_type_storico and rc.record_status =  rc_status_storico and rc.call_result = c_result_storico then
            EXIT;
          END IF;
    
        ELSE
          DBMS_OUTPUT.PUT_LINE(err ||' ' || rc.COLONNA5 || ' L''esito telefonico/applicativo della tabella RECALL_STORICO non coincide con l esito della scheda ON LINE (scheda non in Stale)');
        END IF; 
    
      EXCEPTION WHEN NO_DATA_FOUND THEN
        EXIT;
    
      END;
    
    END LOOP;
    Così mi va ancora in errore alla seconda select.
    Ma io dico.
    Io vorrei fare una cosa di questo tipo

    BEGIN
    SELECT MAX(ID_STORICO) as Max into num from Recall45_debug_storico where colonna5= rc.colonna5;

    SELECT record_type_new, record_status_new, call_result_new,col_esito_new INTO rc_type_storico,rc_status_storico,c_result_storico , es_storico FROM Recall45_debug_storico WHERE colonna5= rc.colonna5 and id_storico=num;

    EXCEPTION WHEN NO_DATA_FOUND THEN
    EXIT;
    IF rc.COL_ESITO = es_storico then /* verifica l esito applicativo, se congruente */
    IF rc.record_type = rc_type_storico and rc.record_status= rc_status_storico and rc.call_result= c_result_storico then
    EXIT;
    END IF;



    ELSE
    DBMS_OUTPUT.PUT_LINE(err ||' ' || rc.COLONNA5 || ' L esito telefonico/applicativo della tabella RECALL_STORICO non coincide con l esito della scheda ON LINE (scheda non in Stale)');
    END IF;

    END;

    _

    Esegue le prime select, se risultano nulle va all'istruzione exception,
    altrimente prosegue con la prima If...

    Sto sbagliando a posizionare l'exception ma non so dove...

  7. #7
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    se scrivi che errore dà forse posso anche darti una soluzione

  8. #8
    Utente di HTML.it L'avatar di Elena78
    Registrato dal
    Oct 2001
    Messaggi
    535
    Originariamente inviato da floyd
    se scrivi che errore dà forse posso anche darti una soluzione
    1) errore mi entra nell'eccezione anche quando non si verifica.

    Ovvero la select ritorna un valore ma lui esce lo stesso

    2) quando invece la select ritorna null da l'errore allegato
    Immagini allegate Immagini allegate

  9. #9
    Utente di HTML.it L'avatar di floyd
    Registrato dal
    Apr 2001
    Messaggi
    3,837
    la prima è impossibile
    nella exception metti un dbms_output.put_line(sqlerrm)
    quando la select non ritorna record non puoi continuare
    le due select devono stare dentro a begin
    credo che exit non interrompa il ciclo

  10. #10
    Utente di HTML.it L'avatar di darkblOOd
    Registrato dal
    Jul 2001
    Messaggi
    2,212

    scusate se mi intrometto ma:

    il blocco exception non va messo fuori dal blocco BEGIN ... END; ??

    Cioè la gestione delle eccezzioni non va fatta a parte? :master:

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.