Saltar al contenido

Referencia a la colección no inicializada PL/SQL

Recuerda que en las ciencias cualquier problema casi siempere puede tener más de una resoluciones, de igual modo mostramos la mejor y más eficiente.

Solución:

En su procedimiento de PRUEBA tiene v declarado como un parámetro OUT – esto significa que el procedimiento necesita inicializar la colección de salida en el procedimiento (por ejemplo v := T();). Incluso si cambia el bloque de llamadas para inicializar u_t esto no ayudará, ya que el u_t la colección no se pasa al procedimiento, solo recibe lo que el procedimiento devuelve.

Cambia tu código de la siguiente manera:

CREATE OR REPLACE PROCEDURE TEST ( u IN T, v OUT T) IS
  i NUMBER := u.FIRST;
BEGIN
  v := T();
  v.EXTEND(u.COUNT);

  IF i IS NOT NULL THEN
    LOOP
      v(i) := u(i);
      i := u.NEXT(i);
      EXIT WHEN i IS NULL;
    END LOOP;
  END IF;
END TEST;

DECLARE
  v_t T;
  u_t T;
BEGIN
  v_t := T();
  v_t.EXTEND(2);

  v_t(1) := 'This is test1';
  v_t(2) := 'This is test2';

  TEST(v_t, u_t);

  FOR i IN u_t.FIRST..u_t.LAST LOOP
    DBMS_OUTPUT.PUT_LINE(u_t(i));
  END LOOP;
END;

Tenga en cuenta que string las constantes en PL/SQL deben estar entre comillas simples, no entre comillas dobles.

Además, el uso de nombres de variables similares que tienen significados opuestos en el procedimiento y el bloque de llamada solo aumenta la confusión. Adquiera el hábito de usar nombres significativos y se ahorrará mucha confusión más adelante.

Comparte y Disfruta.

Acuérdate de que tienes autorización de decir si te ayudó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *