Wypełnianie tabeli PL/SQL z bloku w Oracle D2k Forms
Tablica PL/SQL może być wypełniona z bloku przy użyciu wbudowanego wypełniania Forms'niejawnego TABLE_FROM_BLOCK. Ta bardzo przydatna funkcja eliminuje konieczność jawnego przechodzenia przez blok. Poniższa procedura ilustruje tę koncepcję:PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)Aby skorzystać z tej techniki, wykonaj następujące kroki:
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;
- Zdefiniuj rekord PL/SQL jako odpowiednik struktury rekordu, który ma być przekazany jako dane wejściowe. W tym przypadku jest to state_rec i stanowi dwa elementy KOD i NAZWA odpowiadający STATE_CODE i STATE_NAME.
- Zdefiniuj tabelę PL/SQL jako tabelę rekordów typu zdefiniowanego w kroku 1. W tym przypadku jest to my_table.
Uwaga Dokumentacja Oracle definiuje tabelę PL/SQL jako typu PLITBLM.TABLE_OF_ANY, ale zdefiniowanie tabeli PL/SQL w sposób, który opisałem, działa dobrze.
- Zdefiniuj zmienną typu ITEMS_IN_BLOCK (tabela VARCHAR2 ) i ustawić poszczególne jego elementy na nazwy nazw pozycji bloku, których wartości są elementami typu rekordu zdefiniowanego w kroku 1.
- Wywołaj wbudowaną TABLE_OF_ANY ze zdefiniowaną tabelą PL/SQL, nazwą bloku wejściowego, numerem początkowym rekordu, numerem końcowym rekordu oraz zmienną zdefiniowaną w kroku 3 przekazanymi jako parametry.