Cómo llenar una tabla PL/SQL desde un bloque en Oracle D2k Forms
Una tabla PL/SQL se puede llenar desde un bloque utilizando Forms'implicit populating incorporado TABLE_FROM_BLOCK. Esta característica muy útil elimina la necesidad de recorrer el bloque explícitamente. El siguiente procedimiento ilustra el concepto:PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)Para utilizar esta técnica, siga estos pasos:
IS
/* Define a PL/SQL record with two fields code and name */
TYPE state_rec IS RECORD (code varhcar2(2), name varhcar2(30));
/* Define a PL/SQL table of the record defined above */
TYPE my_table IS TABLE OF state_rec INDEX BY BINARY_INTEGER;
my_table1 my_table;
/* Define a variable of type ITEMS_IN_BLOCK. ITEMS_IN_BLOCK is a
Forms-defined table */
Item_data ITEMS_IN_BLOCK;
Cnt NUMBER;
BEGIN
Item_data(1) := 'STATE_CODE';
item_data(2) := 'STATE_NAME';
/* The call to the Forms built-in TABLE_FROM_BLOCK retrieves the records
from the block and populates the my_table1 table of records */
TABLE_FROM_BLOCK(my_table1, 'STATE',1, ALL_RECORDS, item_data);
-- The SUCCESS or FAILURE of this built-in can be assessed
-- with FORM_SUCCESS, just like any other built-in
IF NOT FORM_SUCCESS THEN
RAISE FORM_TRIGGER_FAILURE;
END IF;
Cnt := my_table1.COUNT;
END populate_plsql_table;
- Defina un registro PL/SQL para que sea equivalente a la estructura del registro que se pasará como entrada. En este caso, es state_rec y constituye los dos elementos CODE y NOMBRE correspondiente a CÓDIGO_ESTADO y NOMBRE_ESTADO.
- Defina la tabla PL/SQL para que sea una tabla de registros del tipo definido en el paso 1. En este caso, es my_table.
NotaLa documentación de Oracle define que la tabla PL/SQL sea del tipo PLITBLM.TABLE_OF_ANY, pero definir la tabla PL/SQL de la manera que he descrito funciona bien.
- Defina una variable de tipo ITEMS_IN_BLOCK (una tabla de VARCHAR2 ) y establezca sus elementos individuales para que sean los nombres de los elementos del bloque cuyos valores figuran como elementos del tipo de registro definido en el paso 1.
- Llama al TABLE_OF_ANY incorporado con la tabla PL/SQL definida, el nombre del bloque de entrada, el número de registro inicial, el número de registro final y la variable definida en el paso 3 pasados como parámetros.