0
你好我是數據庫和PL/SQL的新手,現在我正在學習如何使用遊標。修復無限循環PL/SQL。 Cursos。 c%NOTFOUND無法正常工作時退出
我的問題是,當我在Oracle SQL Developer中執行以下代碼時,我得到一個無限循環。
set serveroutput on
DECLARE
CURSOR c1
IS
select tipoanimal, count(*), avg(precio)
from mi_cursos
group by tipoanimal;
xtotal_cursos number;
xtipo_tipoanimal mi_cursos.tipoanimal%type;
xcuenta_curso_animal number;
xprecio_medio_curso_animal number;
total_porcentaje number;
BEGIN
select count(*) into xtotal_cursos from mi_cursos;
OPEN c1;
LOOP
EXIT WHEN c1%NOTFOUND;
total_porcentaje:= xcuenta_curso_animal/xtotal_cursos*100;
dbms_output.put_line(rpad(xtipo_tipoanimal,10,' ')||
lpad(to_char(xcuenta_curso_animal,'999999'),10,' ')||
lpad(to_char(total_porcentaje,'99999.99'),10,' ')||
lpad(to_char(xprecio_medio_curso_animal, '999999'),10,' '));
END LOOP;
CLOSE c1;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('Error -10: error no conocido');
dbms_output.put_line('Error Oracle ' || TO_CHAR(SQLCODE) || ' Mensaje: ' || SUBSTR(SQLERRM,1,200));
END;
,由於EXIT WHEN c1%NOTFOUND
喊讓我圈外當光標完成的怪異。
有什麼想法?
您不會從循環內的光標中提取另一行。 –
您不應該開始學習遊標,在這裏的數據上幾乎沒有任何理由使用遊標。更好地提高你的SQL技能,你只需要應用一個像COUNT(*)OVER()或RATIO_TO_REPORT這樣的分析函數 – dnoeth