Попълване на PL/SQL таблица от блок в Oracle D2k Forms
Таблица PL/SQL може да бъде попълнена от блок, като се използва вграденото неявно попълване на Forms TABLE_FROM_BLOCK. Тази много удобна функция елиминира необходимостта да преглеждате блока изрично. Следната процедура илюстрира концепцията:PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)За да използвате тази техника, изпълнете следните стъпки:
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;
- Дефинирайте PL/SQL запис, който да е еквивалентен на структурата на записа, която да се предава като вход. В този случай това е state_rec и представлява двата елемента CODE и NAME съответстващ на STATE_CODE и STATE_NAME.
- Дефинирайте таблицата PL/SQL като таблица със записи от типа, дефиниран в стъпка 1. В този случай това е my_table.
Забележка:Документацията на Oracle дефинира PL/SQL таблицата да бъде от тип PLITBLM.TABLE_OF_ANY, но дефинирането на PL/SQL таблицата по начина, който описах, работи добре.
- Дефинирайте променлива от тип ITEMS_IN_BLOCK (таблица от VARCHAR2 ) и задайте неговите отделни елементи да бъдат имената на имената на блоковите елементи, чиито стойности фигурират като елементи от типа на записа, дефиниран в стъпка 1.
- Обадете се на вградената TABLE_OF_ANY с дефинираната PL/SQL таблица, име на входен блок, номер на началния запис, номер на крайния запис и променливата, дефинирана в стъпка 3, предадени като параметри.