2016-11-26 2 views
-1

Я пытаюсь поднять ИСКЛЮЧЕНИЕ после окончания внутреннего цикла и продолжить внешний цикл я получаю следующее сообщение об ошибке:ИСКЛЮЧЕНИЯ в до конца цикла

ERROR at line 29:
ORA-06550: line 29, column 6:
PLS-00103: Encountered the symbol "EXCEPTION" when expecting one of the following:
(begin case declare end exit for goto if loop mod null pragma raise return select update while with << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge

Вот мой код:

DECLARE 
TOTAL_ZERO EXCEPTION; 
client_rec E_CLIENT%ROWTYPE; 
commande_rec E_COMMANDE%ROWTYPE; 
total_client integer:=0; 
total_commande integer:=0; 
i integer:=1; 
j integer:=1; 
Nombre_Commande integer:=0; 
Total_paye E_COMMANDE.TOTAL%TYPE:=0; 
BEGIN 
select count (*) into total_commande from E_COMMANDE; 
select count (*) into total_client from E_CLIENT; 
FOR j IN 1 .. total_client LOOP 
    select * into client_rec from E_CLIENT where NO=j; 
    FOR i IN 1 .. total_commande LOOP 

     select * into commande_rec from E_COMMANDE where NO=i; 
     IF EXTRACT(YEAR FROM commande_rec.DATE_COMMANDE)=2004 THEN 
      IF commande_rec.CLIENT_NO = j THEN 
       Nombre_Commande:=Nombre_Commande+1; 
       Total_paye := Total_paye + commande_rec.TOTAL; 
      END IF; 
     END IF; 
    END LOOP; 
    IF Nombre_Commande=0 THEN RAISE TOTAL_ZERO; END IF; 
    dbms_output.put_line('Numero client  ' || client_rec.NO || '  Nom client  ' || client_rec.NOM || ': '); 
    dbms_output.put_line('total : ' || Total_paye || ' ' || 'Nombre_Commande' || Nombre_Commande); 
    EXCEPTION 
    WHEN TOTAL_ZERO THEN 
    dbms_output.put_line('---------ERROR----------'); 
    Nombre_Commande:=0; 
    Total_paye:=0; 


END LOOP; 
END; 
/

PS: Я использую Sqlplus Oracle 11gR2 на Ubuntu 16.04

ответ

0

Вы пропустили конец цикла как раз перед оператором исключения. И я удалил конец цикла после исключения. Исключение (если используется) всегда идет с инструкцией начала и конца.

Удачи.

DECLARE 
    TOTAL_ZERO EXCEPTION; 
    client_rec E_CLIENT%ROWTYPE; 
    commande_rec E_COMMANDE%ROWTYPE; 
    total_client integer:=0; 
    total_commande integer:=0; 
    i integer:=1; 
    j integer:=1; 
    Nombre_Commande integer:=0; 
    Total_paye E_COMMANDE.TOTAL%TYPE:=0; 
BEGIN 
    select count (*) into total_commande from E_COMMANDE; 
    select count (*) into total_client from E_CLIENT; 
    FOR j IN 1 .. total_client LOOP 
    select * into client_rec from E_CLIENT where NO=j; 
    FOR i IN 1 .. total_commande LOOP 

     select * into commande_rec from E_COMMANDE where NO=i; 
     IF EXTRACT(YEAR FROM commande_rec.DATE_COMMANDE)=2004 THEN 
      IF commande_rec.CLIENT_NO = j THEN 
       Nombre_Commande:=Nombre_Commande+1; 
       Total_paye := Total_paye + commande_rec.TOTAL; 
      END IF; 
     END IF; 
    END LOOP; 
    IF Nombre_Commande=0 THEN RAISE TOTAL_ZERO; END IF; 
    dbms_output.put_line('Numero client  ' || client_rec.NO || '  Nom client  ' || client_rec.NOM || ': '); 
    dbms_output.put_line('total : ' || Total_paye || ' ' || 'Nombre_Commande' || Nombre_Commande); 
    END LOOP; ---> !!!! 
EXCEPTION 
    WHEN TOTAL_ZERO THEN 
     dbms_output.put_line('---------ERROR----------'); 
     Nombre_Commande:=0; 
     Total_paye:=0; 

END; 
/
+0

Я хочу, чтобы первый цикл, чтобы продолжить после того, как исключение, вот почему я поставил END LOOP после исключения –

+0

К сожалению, братан моего плохого –

+0

Кстати, в '' i' и j' переменных вы объявляете в верхнем не используются. Конструкция 'for i in ... loop' неявно объявляет о себе. –

Смежные вопросы