Nach einigem Suchen habe ich die Antwort auf mein eigenes Problem gefunden. Angenommen, Ihr Varray-Typ hieß varchar_pair_array und die in diesem Array gespeicherten Objekte hießen varchar_pair_object. varchar_pair_object ist ein einfaches Objekt, das zwei Varchars als Mitglieder hat.
Hier ist der Code zum Ausführen einer Prozedur, die ein varray von varchar_pair_object (s) aufnimmt:
DECLARE
RetVal SYS_REFCURSOR;
a_simplevalue VARCHAR2(200);
another_simplevalue VARCHAR2(200);
my_array_of_varchar_pairs VARCHAR_PAIR_ARRAY; -- assume varchar_pair_array is defined somewhere else
my_obj VARCHAR_PAIR_OBJECT; -- assume varchar_pair_object is defined somewhere else
my_other_obj VARCHAR_PAIR_OBJECT;
BEGIN
a_simplevalue := 'hello';
another_simplevalue := 'there';
my_obj := VARCHAR_PAIR_OBJECT('nice to meet you', 'greetings');
my_other_obj := VARCHAR_PAIR_OBJECT('goodbye', 'ciao');
my_array_of_varchar_pairs := VARCHAR_PAIR_ARRAY();
my_array_of_varchar_pairs.EXTEND(2); -- this should be the number of objects you plan to put into the array
my_array_of_varchar_pairs(1) := my_obj;
my_array_of_varchar_pairs(2) := my_other_obj;
RetVal := my_function ( a_simplevalue, another_simplevalue, my_array_of_varchar_pairs); -- assuming your array takes two varchars and one array of VARCHAR_PAIR_OBJECT (s)
:to_grid := RetVal;
END;
Kopieren Sie diesen Code, fügen Sie ihn in den SQL-Editor von TOAD ein und ändern Sie ihn, um ihn an Ihre Funktion und Typen anzupassen, und drücken Sie F9. TOAD fragt Sie nach dem Typ der :to_grid-Variablen. Wählen Sie den Cursor aus (vorausgesetzt, Ihre Funktion gibt einen Verweis-Cursor zurück) und drücken Sie die Eingabetaste. TOAD bindet die Ergebnismenge an ein Datengrid.
Links, die mir geholfen haben:
http://www.smart-soft .co.uk/Oracle/oracle-plsql-tutorial-part-11.htm (gutes Tutorial zu Sammlungen)http:/ /download.oracle.com/docs/cd/B10501_01/appdev.920/a96624/10_objs.htm#1972 (besonders hilfreich in diesem Fall ist der Abschnitt über das Deklarieren und Initialisieren von Objekten)
Mit sehr wenig Änderung kann dasselbe mit einer Prozedur durchgeführt werden.