2016-11-26 228 views
-1

我试图内循环结束后,引发异常,并继续外环我得到以下错误之前:EXCEPTION在循环结束

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:我在Ubuntu 16.04

回答

0

用sqlplus的Oracle 11gR2中你只是例外语句之前错过了一个循环结束。我在异常后移除了结束循环。 一个异常(如果使用)始终与开始和结束语句。

祝你好运。

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'变量没有使用。 “我在......循环”结构隐式声明它自己的。 –