Fylla en PL/SQL-tabell från ett block i Oracle D2k-formulär
En PL/SQL-tabell kan fyllas i från ett block med hjälp av Forms implicita ifyllning inbyggda TABLE_FROM_BLOCK. Denna mycket praktiska funktion eliminerar att du måste gå igenom blocket explicit. Följande procedur illustrerar konceptet:PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)För att använda denna teknik, följ dessa steg:
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;
- Definiera en PL/SQL-post så att den motsvarar poststrukturen som ska skickas som indata. I det här fallet är det state_rec och utgör de två objekten KOD och NAMN motsvarande STATE_CODE och STATE_NAME.
- Definiera PL/SQL-tabellen som en tabell med poster av den typ som definierades i steg 1. I det här fallet är det min_tabell.
Obs! Oracle-dokumentationen definierar PL/SQL-tabellen till att vara av typen PLITBLM.TABLE_OF_ANY, men att definiera PL/SQL-tabellen på det sätt jag har beskrivit fungerar bra.
- Definiera en variabel av typen ITEMS_IN_BLOCK (en tabell över VARCHAR2 ) och ställ in dess individuella element som namnen på blockobjektnamnen vars värden är element av posttypen som definieras i steg 1.
- Ring den inbyggda TABLE_OF_ANY med den definierade PL/SQL-tabellen, inmatningsblocknamn, startpostnummer, slutpostnummer och variabeln definierad i steg 3 skickas som parametrar.