Wir hatten in einem Projekt das Problem, einen Ref Cursor auszuwerten, von dem nicht bekannt war, wie viele Spalten er zurückliefert. Dies ist aber notwendig, um eineentsprechende Anzahl an Parametern (bzw. Records/Arrays) zu definieren.
Seit Version 11g kann man nun einen Ref Cursor in einen dbms_sql Cursor umwandeln. Dann ist es möglich, die Spaltenzahl zu ermitteln und dynamisch Variablen für diese Spalten zu definieren.
Zuerst benötigen wir ein Package, das den Datentyp Ref Cursor als Rückgabewert erlaubt:
Dann definieren wir ein Package Body mit einer Funktion, die einen Ref Cursor zurückgibt:
Zu guter Letzt schreiben wir einen anonymen Block, der dann den Ref Cursor aus der Funktion zurückbekommt.Et voila, wir können mit einer beliebigen Spaltenanzahl das Ergebnis weiterverarbeiten: