Recibo este error extraño sin importar lo que haga, dice que el índice está fuera de rango. ¿Algún consejo?
Cualquier parámetro que le dé cuando ejecuto este procedimiento, siempre dice que mi índice debe ser más bajo. Por ejemplo, si le doy los parámetros (1,1), dice que mi índice es 61 y debería estar en el rango de 1 a 60.
Ambas de estas tablas tienen dos columnas, la primera tiene id_produs e id_departament, la segunda tiene id_produs e id_comanda. Ambas tablas tienen números de un solo dígito insertados en ambas columnas, pero nada funciona. ¿Ves algo particularmente malo?
CREATE OR REPLACE PROCEDURE procedura_6
(v_produse_2 produs_departament.id_produs%type, v_produse_5 comanda_produs.id_produs%type )
IS
TYPE varray_produse_2 IS VARRAY(60) OF produs_departament.id_produs%type;
TYPE nested_table_produse_5 IS TABLE OF comanda_produs.id_produs%type;
varray_numar_dept varray_produse_2:=varray_produse_2();
nested_table_numar_com nested_table_produse_5:=nested_table_produse_5();
BEGIN
SELECT id_produs BULK COLLECT INTO varray_numar_dept FROM produs_departament;
SELECT id_produs BULK COLLECT INTO nested_table_numar_com FROM comanda_produs;
for l_index in varray_numar_dept.FIRST..varray_numar_dept.LAST
LOOP
IF (v_produse_2>varray_numar_dept(l_index)) THEN
DBMS_OUTPUT.PUT_LINE(varray_numar_dept(l_index));
END IF;
END LOOP;
for l_index in nested_table_numar_com.FIRST..nested_table_numar_com.LAST
LOOP
IF v_produse_5>nested_table_numar_com(l_index) THEN
DBMS_OUTPUT.PUT_LINE(nested_table_numar_com(l_index));
END IF;
END LOOP;
END procedura_6;
/
execute procedura_6(2,2);
begin
procedura_6(3,3);
end;
/
davy.ai
El problema parece estar en los operadores de comparación utilizados en las instrucciones IF. El signo ‘>’ debería ser reemplazado por el signo ‘<‘ en ambas instrucciones IF. La versión corregida del código es la siguiente:
“`
CREATE OR REPLACE PROCEDURE procedura_6
(v_produse_2 produs_departament.id_produs%type, v_produse_5 comanda_produs.id_produs%type )
IS
TYPE varray_produse_2 IS VARRAY(60) OF produs_departament.id_produs%type;
TYPE nested_table_produse_5 IS TABLE OF comanda_produs.id_produs%type;
varray_numar_dept varray_produse_2:=varray_produse_2();
nested_table_numar_com nested_table_produse_5:=nested_table_produse_5();
BEGIN
SELECT id_produs BULK COLLECT INTO varray_numar_dept FROM produs_departament;
SELECT id_produs BULK COLLECT INTO nested_table_numar_com FROM comanda_produs;
END procedura_6;
/
execute procedura_6(2,2);
begin
procedura_6(3,3);
end;
/