Befüllen einer PL/SQL-Tabelle aus einem Block in Oracle D2k-Formularen
Eine PL/SQL-Tabelle kann aus einem Block gefüllt werden, indem das implizite Füllen von TABLE_FROM_BLOCK. von Forms verwendet wird Diese sehr praktische Funktion macht es überflüssig, den Block explizit zu durchlaufen. Das folgende Verfahren veranschaulicht das Konzept:PROCEDURE populate_plsql_table(my_table1 my_table, cnt OUT NUMBER)Gehen Sie folgendermaßen vor, um diese Technik zu verwenden:
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;
- Definieren Sie einen PL/SQL-Datensatz so, dass er der Datensatzstruktur entspricht, die als Eingabe übergeben werden soll. In diesem Fall ist es state_rec und bildet die beiden Elemente CODE und NAME entspricht STATE_CODE und STATE_NAME.
- Definieren Sie die PL/SQL-Tabelle als eine Tabelle mit Datensätzen des in Schritt 1 definierten Typs. In diesem Fall ist es my_table.
AnmerkungDie Oracle-Dokumentation definiert die PL/SQL-Tabelle als vom Typ PLITBLM.TABLE_OF_ANY, aber die Definition der PL/SQL-Tabelle auf die von mir beschriebene Weise funktioniert gut.
- Definieren Sie eine Variable vom Typ ITEMS_IN_BLOCK (eine Tabelle von VARCHAR2 ) und setzen Sie seine einzelnen Elemente auf die Namen der Blockelementnamen, deren Werte als Elemente des in Schritt 1 definierten Datensatztyps dargestellt werden.
- Rufen Sie das eingebaute TABLE_OF_ANY auf wobei die definierte PL/SQL-Tabelle, der Name des Eingabeblocks, die Startdatensatznummer, die Enddatensatznummer und die in Schritt 3 definierte Variable als Parameter übergeben werden.