我试图在内循环结束后提出一个EXCEPTION并继续外循环我得到以下错误:
第29行的错误:
ORA-06550:第29行,第6栏:
PLS-00103:遇到符号" EXCEPTION"当期待以下之一时:
(如果循环mod为null,则开始为goto声明结束退出 用pragma提高返回选择更新 << 继续关闭当前删除获取锁定插入打开回滚 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上使用SQLplus Oracle 11gR2
答案 0 :(得分:0)
您在异常声明之前错过了一个结束循环。我在异常后删除了结束循环。 异常(如果使用)始终与begin和end语句一起使用。
祝你好运。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;
/