0
こんにちは私はデータベースとPL/SQLを初めて使っています。今はカーソルの使い方を学んでいます。無限ループPL/SQLを修正しました。 Cursos。 c%NOTFOUNDが機能しないときに終了する
私の問題は、Oracle SQL Developerで次のコードを実行すると無限ループが発生するということです。カーソルが行われたときにEXIT WHEN c1%NOTFOUND
叫びは、ループの外に私を得るために奇妙な
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;
。
どのような考えですか?
ループ内のカーソルから別の行をフェッチしていません。 –
カーソルの学習を始めるべきではありません。ここでのようなデータにカーソルを使用する理由はほとんどありません。 SQLスキルを向上させるには、単にCOUNT(*)OVER()やRATIO_TO_REPORTのような分析関数を適用するだけです – dnoeth