Remplir une table PL/SQL à partir d'un bloc dans Oracle D2k Forms
Une table PL/SQL peut être remplie à partir d'un bloc à l'aide de la fonction intégrée de remplissage implicite de Forms TABLE_FROM_BLOCK. Cette fonctionnalité très pratique vous évite d'avoir à parcourir explicitement le bloc. La procédure suivante illustre le concept :PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)Pour utiliser cette technique, suivez ces étapes :
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;
- Définissez un enregistrement PL/SQL comme étant équivalent à la structure d'enregistrement à transmettre en entrée. Dans ce cas, il s'agit de state_rec et constitue les deux éléments CODE et NOM correspondant à STATE_CODE et STATE_NAME.
- Définissez la table PL/SQL comme étant une table d'enregistrements du type défini à l'étape 1. Dans ce cas, il s'agit de my_table.
RemarqueLa documentation Oracle définit la table PL/SQL comme étant de type PLITBLM.TABLE_OF_ANY, mais définir la table PL/SQL de la manière que j'ai décrite fonctionne bien.
- Définir une variable de type ITEMS_IN_BLOCK (une table de VARCHAR2 ) et définissez ses éléments individuels comme étant les noms des éléments de bloc dont les valeurs figurent en tant qu'éléments du type d'enregistrement défini à l'étape 1.
- Appelez la TABLE_OF_ANY intégrée avec la table PL/SQL définie, le nom du bloc d'entrée, le numéro d'enregistrement de début, le numéro d'enregistrement de fin et la variable définie à l'étape 3 transmise en tant que paramètres.