Continuando con esta serie sobre las colecciones APEX, en en que ya se publicó las entradas:

  1. Introducción a las colecciones APEX
  2. Cómo nombrar, crear y acceder a colecciones

En esta ocasión vamos a explicar cómo fusionar, truncar y eliminar colecciones.

Fusionar colecciones

Se pueden fusionar miembros de una colección con valores pasados en un conjunto de arreglos. Al usar el argumento p_init_query, se puede crear una colección desde la consulta proporcionada. Para fusionar colecciones, utilizamos el procedimiento MERGE_MEMBERS.

MERGE_MEMBERS Este procedimiento se utiliza para fusionar miembros de una colección nombrada dada, con los correspondientes valores pasados en los arreglos. Si la colección indicada no existe, entonces se crea una. Si se proporciona un argumento p_init_query, la colección se crea a partir de la consulta SQL proporcionada. Si el nombre de la colección existe, sucede lo siguiente:

  1. Las líneas en la colección que no están en el arreglo son eliminadas.
  2. Las líneas existentes en la colección y en los arreglos son actualizadas.
  3. Las líneas en los arreglos que no existen en la colección son insertadas.

El conteo de elementos en la tabla PL/SQL p_c001 es usado como el número total de elementos en todas las tablas PL/SQL. Por ejemplo, si p_c001.count es 2 y p_c002.count es 10, solo 2 miembros son fusionados. Si p_c001 es nulo se genera un error de aplicación.

El siguiente ejemplo crea una colección sobre la tabla de empleados y luego fusiona los contenidos de los arreglos locales con la colección, actualizando el puesto de dos empleados.

  DECLARE
     l_seq APEX_APPLICATION_GLOBAL.VC_ARR2;
     l_c001 APEX_APPLICATION_GLOBAL.VC_ARR2;
     l_c002 APEX_APPLICATION_GLOBAL.VC_ARR2;
     l_c003 APEX_APPLICATION_GLOBAL.VC_ARR2;
  BEGIN
     l_seq(1) := 1;
     l_c001(1) := 7369;
     l_c002(1) := 'SMITH';
     l_c003(1) := 'MANAGER';
     l_seq(2) := 2;
     l_c001(2) := 7499;
     l_c002(2) := 'ALLEN';
     l_c003(2) := 'CLERK';
     APEX_COLLECTION.MERGE_MEMBERS(
       p_collection_name => 'EMPLOYEES',
       p_seq => l_seq,
       p_c001 => l_c001,
       p_c002 => l_c002,
       p_c003 => l_c003,
       p_init_query => 'select empno, ename, job from emp order by empno');
  END;

Truncar una colección

Cuando se trunca una colección, se remueven todos lo miembros de la colección especificada, pero la colección nombrada permanece en su lugar. En otras palabras, se elimina su contenido pero no la colección como tal; para lo cual usamos el siguiente procedimiento:

TRUNCATE_COLLECTION  Utilice este procedimiento para remover todos los miembros de una colección nombrada. Si la colección indicada no existe para el usuario actual en la misma sesión y para el ID de aplicación actual, se produce un error de aplicación.

En el ejemplo a continuación, se remueven todos los miembros de la colección llamada DEPARTAMENTOS.

  BEGIN;
     APEX_COLLECTION.TRUNCATE_COLLECTION(
        p_collection_name => 'DEPARTMENTOS');
  END;

Eliminar colecciones

Cuando se elimina una colección, se elimina tanto la colección como los miembros de la misma. Si usted no elimina una colección, está es eliminada cuando la sesión en la que se creó es purgada.

Existen diferentes métodos para eliminar colecciones:

DELETE_COLLECTION Utilice este procedimiento para eliminar una colección nombrada. Todos los miembros que pertenecen a la colección son removidos y la colección nombrada es borrada. Si la colección indicada no existe para el mismo usuario en la sesión actual para el ID de aplicación actual, se produce un error de aplicación.

El siguiente ejemplo muestra como utilizar el procedimiento DELETE_COLLECTION para eliminar la colección EMPLEADOS.

   Begin
       APEX_COLLECTION.DELETE_COLLECTION(
           p_collection_name => 'EMPLEADOS');
   End;

 

DELETE_ALL_COLLECTIONS Se usa este procedimiento para eliminar todas las colecciones que pertenecen al usuario actual en la sesión de APEX actual para la aplicación actual.

El ejemplo a continuación muestra el uso de este procedimiento:

  Begin
    APEX_COLLECTION.DELETE_ALL_COLLECTIONS;
  End;

 

DELETE_ALL_COLLECTIONS_SESSION Se utiliza este procedimiento para eliminar todas las colecciones que pertenecen al usuario actual de APEX, sin importar la aplicación a la que pertenezcan.

En el siguiente ejemplo, se muestra el uso de dicho procedimiento:

  Begin
    APEX_COLLECTION.DELETE_ALL_COLLECTIONS_SESSION;
  End;

Hasta el momento hemos cubierto cómo nombrar, crear, acceder, fusionar, truncar y eliminar colecciones, además de la introducción al concepto de colecciones APEX. En la próxima entrega, veremos cómo agregar, modificar y eliminar miembros de una colección.

Share This