Een PL/SQL-tabel vullen vanuit een blok in Oracle D2k-formulieren
Een PL/SQL-tabel kan worden gevuld vanuit een blok met behulp van Forms'impliciete ingebouwde TABLE_FROM_BLOCK. Deze zeer handige functie elimineert dat u expliciet door het blok hoeft te lopen. De volgende procedure illustreert het concept:PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)Volg deze stappen om deze techniek te gebruiken:
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;
- Definieer een PL/SQL-record als equivalent aan de recordstructuur die als invoer moet worden doorgegeven. In dit geval is het state_rec en vormt de twee items CODE en NAAM komt overeen met STATE_CODE en STATE_NAME.
- Definieer de PL/SQL-tabel als een tabel met records van het type gedefinieerd in stap 1. In dit geval is het my_table.
OpmerkingDe Oracle-documentatie definieert de PL/SQL-tabel als van het type PLITBLM.TABLE_OF_ANY, maar het definiëren van de PL/SQL-tabel op de manier die ik heb beschreven, werkt goed.
- Definieer een variabele van het type ITEMS_IN_BLOCK (een tabel van VARCHAR2 ) en stel de afzonderlijke elementen in als de namen van de namen van blokitems waarvan de waarden worden weergegeven als elementen van het recordtype dat is gedefinieerd in stap 1.
- Bel de ingebouwde TABLE_OF_ANY met de gedefinieerde PL/SQL-tabel, invoerbloknaam, startrecordnummer, eindrecordnummer en de variabele gedefinieerd in stap 3 doorgegeven als parameters.