Preenchendo uma tabela PL/SQL a partir de um bloco em formulários Oracle D2k
Uma tabela PL/SQL pode ser preenchida a partir de um bloco usando o preenchimento implícito do Forms TABLE_FROM_BLOCK. Esse recurso muito útil elimina a necessidade de percorrer o bloco explicitamente. O procedimento a seguir ilustra o conceito:PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)Para usar essa técnica, siga estas etapas:
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;
- Defina um registro PL/SQL para ser equivalente à estrutura de registro a ser passada como entrada. Neste caso, é state_rec e constitui os dois itens CÓDIGO e NOME correspondente a STATE_CODE e STATE_NAME.
- Defina a tabela PL/SQL para ser uma tabela de registros do tipo definido na etapa 1. Nesse caso, é my_table.
ObservaçãoA documentação do Oracle define a tabela PL/SQL para ser do tipo PLITBLM.TABLE_OF_ANY, mas definir a tabela PL/SQL da maneira que descrevi funciona bem.
- Defina uma variável do tipo ITEMS_IN_BLOCK (uma tabela de VARCHAR2 ) e defina seus elementos individuais para serem os nomes dos nomes dos itens do bloco cujos valores figuram como elementos do tipo de registro definido na etapa 1.
- Chame o TABLE_OF_ANY integrado com a tabela PL/SQL definida, nome do bloco de entrada, número do registro inicial, número do registro final e a variável definida na etapa 3 passada como parâmetros.