In einer Anwendung können GUI-Elemente mit SQL-Anweisungen initialisiert werden.So geben Sie mehrere Werte aus einer Funktion ohne globale Typen zurück
Da sich die zugrunde liegende Datenbankstruktur ändern kann, bevorzuge ich es, die Struktur zu verbergen und stattdessen ein Oracle-Paket als Schnittstelle zu verwenden. Für einzelne Werte funktioniert dieser Ansatz gut mit Funktionen wie:
SELECT myPackage.getNameByID(1337) $GUIElement
FROM DUAL;
Jetzt habe ich das Problem der Initialisierung einer Liste. Ursprünglicher Code:
SELECT name $GUIList
FROM myTable;
Um mehrere Werte von einer Funktion zurückzugeben, muss ich einen neuen SQL-Typ definieren. Wenn die Funktion ein TABLE OF VARCHAR2
gibt diesen Code funktioniert:
SELECT COLUMN_VALUE $GUIList
FROM TABLE(myPackage.getNames())
Leider habe ich keine Rechte habe, um neue Typen auf der produktiven Datenbank zu erstellen. Gibt es also in Oracle eine Möglichkeit, ein ähnliches Verhalten zu erhalten, ohne einen neuen Datentyp zu definieren? Ich habe in SYS_REFCURSER
geschaut, aber es scheint nicht richtig zu funktionieren.
Warum richten Sie es nicht ein, so dass die Funktion immer eine Tabelle zurückgibt? –
Soweit ich weiß, benötigen Sie einen neuen SQL-Typ, um eine Tabelle zurückzugeben. – Thanthla
Sie können dies tun, indem Sie eine Datenkassette in PL/SQL erstellen. Siehe z.B. hier: http://www.oracle-developer.net/display.php?id=422 und hier: https://github.com/method5/method4 –