Population af en PL/SQL-tabel fra en blok i Oracle D2k-formularer
En PL/SQL-tabel kan udfyldes fra en blok ved hjælp af Forms' implicitte udfyldning af indbyggede TABLE_FROM_BLOCK. Denne meget praktiske funktion eliminerer, at du skal gå eksplicit gennem blokken. Følgende procedure illustrerer konceptet:PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)Følg disse trin for at bruge denne teknik:
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;
- Definer en PL/SQL-post, så den svarer til den poststruktur, der skal sendes som input. I dette tilfælde er det state_rec og udgør de to elementer KODE og NAVN svarende til STATE_CODE og STATE_NAME.
- Definer PL/SQL-tabellen til at være en tabel med poster af typen defineret i trin 1. I dette tilfælde er det min_tabel.
Bemærk Oracle-dokumentationen definerer PL/SQL-tabellen til at være af typen PLITBLM.TABLE_OF_ANY, men at definere PL/SQL-tabellen på den måde, jeg har beskrevet, fungerer godt.
- Definer en variabel af typen ITEMS_IN_BLOCK (en tabel over VARCHAR2 ) og indstil dens individuelle elementer til at være navnene på blokelementnavnene, hvis værdier figurerer som elementer af posttypen defineret i trin 1.
- Kald den indbyggede TABLE_OF_ANY med den definerede PL/SQL-tabel, inputbloknavn, startpostnummer, slutpostnummer og variabelen defineret i trin 3 videregivet som parametre.