En la entrada anterior, puede encontrar el primer grupo de funciones y procedimientos del paquete API APEX_COLLECTION, en esta, continuamos con un segundo grupo de las mismas.
Procedimiento CREATE_COLLECTION_FROM_QUERY_B
Utilice este procedimiento para crear una colección a partir de una consulta proporcionada mediante operaciones masivas. Este método ofrece un rendimiento significativamente más rápido que el método CREATE_COLLECTION_FROM_QUERY. La consulta se analiza como el propietario de la aplicación. Si existe una colección con el mismo nombre para el usuario actual en la misma sesión para el ID de aplicación actual, se genera un error de aplicación.
Este procedimiento utiliza SQL dinámico masivo para realizar las operaciones de extracción e inserción en la colección nombrada. Este procedimiento impone dos limitaciones:
No se calcula la suma de comprobación MD5 para los datos del miembro.
Ningún valor de columna en la consulta p_query puede superar los 2000 bytes. Si se encuentra una fila que tiene un valor de columna de más de 2000 bytes, se genera un error durante la ejecución. En Oracle Database 11g versión 2 (11.2.0.1) o posterior, este límite de columna es de 4000 bytes.
La sintaxis del procedimiento es:
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B
(
p_collection_name IN VARCHAR2,
p_query IN VARCHAR2,
p_max_row_count IN NUMBER DEFAULT NULL);
Donde:
Parámetro | Descripción |
---|---|
|
El nombre de la colección. La longitud máxima es de 255 caracteres. Se devuelve un error si esta colección existe con el nombre especificado del usuario actual y en la misma sesión. |
|
Consulta a ejecutar para rellenar los miembros de la colección. |
|
Número máximo de filas devueltas por la consulta en p_query que deben agregarse a la colección. |
Un ejemplo del uso de este procedimiento es:
declare
l_query varchar2(4000);
Begin
l_query := ‘select empno, ename, job, sal from emp’;
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERY_B
(
p_collection_name => ‘EMPLOYEES’,
p_query => l_query );
End;
Procedimiento CREATE_COLLECTION_FROM_QUERYB2
Utilice este procedimiento para crear una colección a partir de una consulta proporcionada mediante operaciones masivas. Este método ofrece un rendimiento significativamente más rápido que el método CREATE_COLLECTION_FROM_QUERY_2. La consulta se analiza como el propietario de la aplicación. Si existe una colección con el mismo nombre para el usuario actual en la misma sesión para el ID de aplicación actual, se genera un error de aplicación. Es idéntico a CREATE_COLLECTION_FROM_QUERY_B, sin embargo, las primeras cinco columnas de la cláusula SELECT deben ser numéricas y las siguientes cinco columnas deben ser de fecha. Después de las columnas de fecha, puede haber hasta 50 columnas de caracteres en la cláusula SELECT
Este procedimiento utiliza SQL dinámico masivo para realizar las operaciones de extracción e inserción en la colección nombrada. Este procedimiento impone dos limitaciones:
- No se calcula la suma de comprobación MD5 para los datos del miembro.
- Ningún valor de columna en la consulta p_query puede superar los 2000 bytes. Si se encuentra una fila que tiene un valor de columna de más de 2000 bytes, se genera un error durante la ejecución. En Oracle Database 11g versión 2 (11.2.0.1) o posterior, este límite de columna es de 4000 bytes.
La sintaxis del procedimiento es:
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERYB2 (
p_collection_name IN VARCHAR2,
p_query IN VARCHAR2,
p_names IN apex_application_global.vc_arr2,
p_values IN apex_application_global.vc_arr2,
p_max_row_count IN NUMBER default null,
p_truncate_if_exists IN VARCHAR2 default ‘NO’);
Donde:
Parámetro | Descripción |
---|---|
|
El nombre de la colección. La longitud máxima es de 255 caracteres. Se devuelve un error si esta colección existe con el nombre especificado del usuario actual y en la misma sesión. |
|
Consulta a ejecutar para rellenar los miembros de la colección. |
|
Matriz de nombres de variables de vinculación utilizados en la instrucción de consulta. |
|
Matriz de valores de variables de vinculación utilizados en las variables de vinculación en la instrucción de consulta. |
|
Número máximo de filas devueltas por la consulta en p_query que deben agregarse a la colección. |
|
Si es |
Un ejemplo del uso de este procedimiento es:
declare
l_query varchar2(4000);
Begin
l_query := ‘select empno, sal, comm, deptno, null, hiredate, null,
null, null, null, ename, job, mgr from emp where deptno = :b1′;
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERYB2 (
p_collection_name => ‘EMPLOYEES’,
p_query => l_query,
p_names => apex_util.string_to_table(‘b1’),
p_values => apex_util.string_to_table(’10’));
End;
Procedimiento CREATE_COLLECTION_FROM_QUERYB2
Utilice este procedimiento para crear una colección a partir de una consulta proporcionada mediante operaciones masivas. Este método ofrece un rendimiento significativamente más rápido que el método CREATE_COLLECTION_FROM_QUERY_2. La consulta se analiza como el propietario de la aplicación. Si existe una colección con el mismo nombre para el usuario actual en la misma sesión para el ID de aplicación actual, se genera un error de aplicación. Es idéntico a CREATE_COLLECTION_FROM_QUERY_B, sin embargo, las primeras cinco columnas de la cláusula SELECT deben ser numéricas y las siguientes cinco columnas deben ser de fecha. Después de las columnas de fecha, puede haber hasta 50 columnas de caracteres en la cláusula SELECT
Este procedimiento utiliza SQL dinámico masivo para realizar las operaciones de extracción e inserción en la colección nombrada. Este procedimiento impone dos limitaciones:
- No se calcula la suma de comprobación MD5 para los datos del miembro.
- Ningún valor de columna en la consulta p_query puede superar los 2000 bytes. Si se encuentra una fila que tiene un valor de columna de más de 2000 bytes, se genera un error durante la ejecución. En Oracle Database 11g versión 2 (11.2.0.1) o posterior, este límite de columna es de 4000 bytes.
La sintaxis del procedimiento es:
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERYB2
(
p_collection_name IN VARCHAR2,
p_query IN VARCHAR2,
p_max_row_count IN NUMBER DEFAULT);
Donde:
Parámetro | Descripción |
---|---|
|
El nombre de la colección. La longitud máxima es de 255 caracteres. Se devuelve un error si esta colección existe con el nombre especificado del usuario actual y en la misma sesión. |
|
Consulta a ejecutar para rellenar los miembros de la colección. |
|
Número máximo de filas devueltas por la consulta en p_query que deben agregarse a la colección. |
Un ejemplo del uso de este procedimiento es:
DECLARE
l_query varchar2(4000);
BEGIN
l_query := ‘select empno, sal, comm, deptno, null, hiredate, null,
null, null, null, ename, job, mgr from emp where deptno = 10′;
APEX_COLLECTION.CREATE_COLLECTION_FROM_QUERYB2
(
p_collection_name => ‘EMPLOYEES’,
p_query => l_query);
END;
Procedimiento DELETE_ALL_COLLECTIONS
Utilice este procedimiento para eliminar todas las colecciones que pertenecen al usuario actual en la sesión actual de APEX para el ID de aplicación actual.
La sintaxis del procedimiento es:
APEX_COLLECTION.DELETE_ALL_COLLECTIONS;
Un ejemplo del uso de este procedimiento es:
Begin
APEX_COLLECTION.DELETE_ALL_COLLECTIONS;
End;
Procedimiento DELETE_ALL_COLLECTIONS_SESSION
Utilice este procedimiento para eliminar todas las colecciones que pertenecen al usuario actual en la sesión actual de Application Express, independientemente de la ID de la aplicación.
La sintaxis del procedimiento es:
APEX_COLLECTION.DELETE_ALL_COLLECTIONS_SESSION;
Un ejemplo del uso de este procedimiento es:
Begin
APEX_COLLECTION.DELETE_ALL_COLLECTIONS_SESSION;
End;
Procedimiento DELETE_COLLECTION
Utilice este procedimiento para eliminar una colección con nombre. Todos los miembros que pertenecen a la colección se eliminan y la colección nombrada se elimina. Si la colección nombrada no existe para el mismo usuario en la sesión actual para el Id. de aplicación actual, se genera un error de aplicación.
La sintaxis del procedimiento es:
APEX_COLLECTION.DELETE_COLLECTION (
p_collection_name IN VARCHAR2);
Donde:
Parámetro | Descripción |
---|---|
|
El nombre de la colección de la que se quitarán y soltarán todos los miembros. Se devuelve un error si esta colección no existe con el nombre especificado del usuario actual y en la misma sesión. |
Un ejemplo del uso de este procedimiento es:
Begin
APEX_COLLECTION.DELETE_COLLECTION(
p_collection_name => ‘EMPLOYEE’);
End;
Procedimiento DELETE_MEMBER
Utilice este procedimiento para eliminar un miembro específico de una colección con nombre determinado. Si la colección nombrada no existe para el mismo usuario en la sesión actual para el Id. de aplicación actual, se genera un error de aplicación.
La sintaxis del procedimiento es:
APEX_COLLECTION.DELETE_MEMBER (
p_collection_name IN VARCHAR2,
p_seq IN VARCHAR2);
Donde:
Parámetro | Descripción |
---|---|
|
El nombre de la colección de la que se eliminará el miembro especificado. La longitud máxima es de 255 caracteres. Los nombres de las colecciones no distinguen entre mayúsculas y minúsculas y se convierten a mayúsculas. Se devuelve un error si esta colección no existe para el usuario actual en la misma sesión. |
|
El identificador de secuencia del miembro de la colección a eliminar. |
Un ejemplo del uso de este procedimiento es:
Begin
APEX_COLLECTION.DELETE_MEMBER(
p_collection_name => ‘EMPLOYEES’,
p_seq => ‘2’);
End;
Procedimiento DELETE_MEMBERS
Utilice este procedimiento para eliminar todos los miembros de una colección determinada donde el atributo especificado por el número de atributo es igual al valor proporcionado. Si la colección nombrada no existe para el mismo usuario en la sesión actual para el Id. de aplicación actual, se genera un error de aplicación. Si el número de atributo especificado no es válido o está fuera del rango de 1 a 50, se genera un error.
Si el valor del atributo proporcionado es nulo, todos los miembros de la colección nombrada se eliminan donde el atributo, especificado por p_attr_number, es nulo.
La sintaxis del procedimiento es:
APEX_COLLECTION.DELETE_MEMBERS (
p_collection_name IN VARCHAR2,
p_attr_number IN VARCHAR2,
p_attr_value IN VARCHAR2);
Donde:
Parámetro | Descripción |
---|---|
|
El nombre de la colección de la que se eliminarán los miembros especificados. La longitud máxima es de 255 caracteres. Los nombres de las colecciones no distinguen entre mayúsculas y minúsculas y se convierten a mayúsculas. Se devuelve un error si esta colección no existe para el usuario actual en la misma sesión. |
|
Número de atributo del atributo de miembro utilizado para hacer coincidir el valor de atributo especificado para su eliminación. Los valores válidos son del 1 al 50 y nulo. |
|
Valor de atributo del atributo de miembro utilizado para hacer coincidir la eliminación. La longitud máxima puede ser de 4.000 bytes. El valor del atributo se trunca a 4000 bytes si es mayor que esta cantidad. |
Un ejemplo del uso de este procedimiento es:
Begin
apex_collection.delete_members(
p_collection_name => ‘GROCERIES’
p_attr_number => 5,
p_attr_value => ‘APPLE’ );
Commit;
End;
Función GET_MEMBER_MD5
Utilice esta función para calcular y devolver el resumen del mensaje de los atributos del miembro especificado por el ID de secuencia. Este cálculo del resumen del mensaje es igual al cálculo realizado de forma nativa por las colecciones. Así, el resultado de esta función podría compararse con la columna MD5_ORIGINAL de la vista apex_collections.
Si no existe una colección con el nombre especificado para el usuario actual en la misma sesión y para el ID de aplicación actual, se genera un error de aplicación. Si el miembro especificado por el ID de secuencia p_seq no existe, se genera un error de aplicación.
La sintaxis de la función es:
APEX_COLLECTION.GET_MEMBER_MD5 (
p_collection_name IN VARCHAR2,
p_seq IN NUMBER)
RETURN VARCHAR2;
Donde:
Parámetro | Descripción |
---|---|
|
El nombre de la colección a la que se agregará esta matriz de miembros. Se devuelve un error si esta colección no existe con el nombre especificado del usuario actual y en la misma sesión. |
p_seq |
ID de secuencia del miembro de la colección. |
Un ejemplo del uso de esta función es:
declare
l_md5 varchar2(4000);
begin
l_md5 := apex_collection.get_member_md5(
p_collection_name => ‘GROCERIES’
p_seq => 10 );
end;
Procedimiento MERGE_MEMBERS
Utilice este procedimiento para fusionar miembros de la colección con nombre dada con los valores pasados en las matrices. Si la colección nombrada no existe, se crea una. Si se proporciona p_init_query, la colección se crea a partir de la consulta SQL proporcionada. Si la colección nombrada existe, ocurre lo siguiente:
- Se eliminan las filas de la colección y no de las matrices.
- Se actualizan las filas de las colecciones y de las matrices.
- Se insertan filas en las matrices y no en la colección.
El recuento de elementos en la tabla p_c001 PL/SQL se utiliza 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 se fusionan 2 miembros. Si p_c001 es nulo, se genera un error de aplicación.
La sintaxis del procedimiento es:
APEX_COLLECTION.MERGE_MEMBERS (
p_collection_name IN VARCHAR2,
p_seq IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
p_c001 IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
p_c002 IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
p_c003 IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
…
p_c050 IN APEX_APPLICATION_GLOBAL.VC_ARR2 DEFAULT empty_vc_arr,
p_null_index IN NUMBER DEFAULT 1,
p_null_value IN VARCHAR2 DEFAULT null,
p_init_query IN VARCHAR2 DEFAULT null);
Donde:
Parámetro | Descripción |
---|---|
|
El nombre de la colección. La longitud máxima es de 255 bytes. Los nombres de las colecciones no distinguen entre mayúsculas y minúsculas y se convierten a mayúsculas. |
|
Matriz de valores de atributos que se fusionarán. La longitud máxima es de 4.000 bytes. Cualquier atributo de carácter que supere los 4000 caracteres se trunca a 4000 caracteres. El recuento de la matriz p_c001 se usa en todas las matrices. Si no se proporcionan valores, no se realizan acciones. |
|
Atributo de los valores de los atributos NN que se fusionarán. La longitud máxima puede ser de 4.000 bytes. El valor del atributo se trunca a 4000 bytes si es mayor que esta cantidad. |
|
Identifica el número de secuencia de la colección que se fusionará. |
|
Esto es, si el elemento identificado por este valor es nulo, trate esta fila como una fila nula. Por ejemplo, si p_null_index es 3, entonces p_c003 se trata como una fila nula. En otras palabras, dígale a la función de combinación que ignore esta fila. Esto da como resultado que las filas nulas se eliminen de la colección. El índice nulo funciona con el valor nulo. Si el valor del argumento p_cXXX es igual a p_null_value, la fila se trata como nula. |
p_null_value |
Se usa con el argumento p_null_index. Identifica el valor nulo. Si se utiliza, este valor no debe ser nulo. Un valor típico para este argumento es «0» |
p_init_query |
Si la colección no existe, la colección se crea mediante esta consulta. |
Un ejemplo del uso de este procedimiento es:
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;
Procedimiento MOVE_MEMBER_DOWN
Utilice este procedimiento para ajustar el Id. de secuencia de un miembro específico en la colección nombrada dada en uno (restar uno), intercambiando el Id. de secuencia con el que está reemplazando. Por ejemplo, 3 se convierte en 2 y 2 se convierte en 3.
Si no existe una colección con el nombre especificado para el usuario actual en la misma sesión y para el ID de aplicación actual, se genera un error de aplicación.
Si el miembro especificado por el ID de secuencia p_seq no existe, se genera un error de aplicación. Si el miembro especificado por el ID de secuencia p_seq es la secuencia más baja de la colección, NO se devuelve un error de aplicación.
La sintaxis del procedimiento es:
APEX_COLLECTION.MOVE_MEMBER_DOWN (
p_collection_name IN VARCHAR2,
p_seq IN NUMBER );
Donde:
Parámetro | Descripción |
---|---|
p_collection_name |
El nombre de la colección. La longitud máxima es de 255 bytes. Los nombres de las colecciones no distinguen entre mayúsculas y minúsculas y se convierten a mayúsculas. Se devuelve un error si esta colección no existe con el nombre especificado del usuario actual en la misma sesión. |
p_seq |
Identifica el número de secuencia del miembro de la colección que se moverá hacia abajo en uno. |
Un ejemplo del uso de este procedimiento es:
BEGIN
APEX_COLLECTION.MOVE_MEMBER_DOWN(
p_collection_name => ‘EMPLOYEES’,
p_seq => ‘5’ );
END;
Procedimiento MOVE_MEMBER_UP
Utilice este procedimiento para ajustar el ID de secuencia del miembro especificado en la colección nombrada dada en uno (agregar uno), intercambiando el ID de secuencia con el que está reemplazando. Por ejemplo, 2 se convierte en 3 y 3 se convierte en 2.
Si no existe una colección con el nombre especificado para el usuario actual en la misma sesión y para el ID de aplicación actual, se genera un error de aplicación.
Si el miembro especificado por el ID de secuencia p_seq no existe, se genera un error de aplicación. Si el miembro especificado por el ID de secuencia p_seq es la secuencia más alta de la colección, no se devuelve un error de aplicación.
La sintaxis del procedimiento es:
APEX_COLLECTION.MOVE_MEMBER_UP (
p_collection_name IN VARCHAR2,
p_seq IN NUMBER );
Donde:
Parámetro | Descripción |
---|---|
p_collection_name |
El nombre de la colección. La longitud máxima es de 255 bytes. Los nombres de las colecciones no distinguen entre mayúsculas y minúsculas y se convierten a mayúsculas. Se devuelve un error si esta colección no existe con el nombre especificado del usuario actual en la misma sesión. |
p_seq |
Identifica el número de secuencia del miembro de la colección que se moverá hacia arriba en uno. |
Un ejemplo del uso de este procedimiento es:
BEGIN
APEX_COLLECTION.MOVE_MEMBER_UP(
p_collection_name => ‘EMPLOYEES’,
p_seq => ‘5’ );
END;
Procedimiento RESEQUENCE_COLLECTION
Para una colección con nombre, use este procedimiento para actualizar el valor seq_id de cada miembro para que no existan espacios en la secuencia. Por ejemplo, una colección con el siguiente conjunto de ID de secuencia (1,2,3,5,8,9) se convierte en (1,2,3,4,5,6). Si no existe una colección con el nombre especificado para el usuario actual en la misma sesión y para el ID de aplicación actual, se genera un error de aplicación.
La sintaxis del procedimiento es:
APEX_COLLECTION.RESEQUENCE_COLLECTION (
p_collection_name IN VARCHAR2);
Donde:
Parámetro | Descripción |
---|---|
p_collection_name |
El nombre de la colección a resecuenciar. Se devuelve un error si esta colección no existe con el nombre especificado del usuario actual y en la misma sesión. |
Un ejemplo del uso de este procedimiento es:
BEGIN
APEX_COLLECTION.RESEQUENCE_COLLECTION (
p_collection_name => ‘DEPARTMENTS’);
END;
En la siguiente entrada, continuaremos con el detalle del segundo grupo de procedimientos y funciones que componen el paquete APEX_COLLECTION.