Ich möchte eine Funktion mit zwei IN
Parametern schreiben, wobei der erste eine varchar
und der zweite eine Liste von ist varchars
. Basierend auf diesen möchte ich eine Tabelle mit unterschiedlichen Spaltenmengen und Typnamen zurückgeben varchar
.
Soweit ich gesehen habe, muss ich immer ein Objekt / einen Datensatz und einen Tabellentyp davon erstellen. Das bedeutet, dass meine Idee nicht funktioniert? Das zugrunde liegende Ziel besteht darin, eine Systembefehlsausgabe als Tabelle an einen Angerufenen zurückzugeben.
Bearbeiten: mehr zur Aufgabe. Ich möchte einen Betriebssystembefehl ausgeben, die Ausgabe verbrauchen und als Tabelle zurückgeben. Die Ausgabe des OS-Befehls sind CSV-formatierte Daten. Zum Zeitpunkt der Ausführung kenne ich nicht die Anzahl der zurückzugebenden Zeilen, sondern nur die Anzahl der Spalten, die als zweites Argument übergeben werden. Ich dachte darüber nach, Java mit einer Dynamik zu verwenden STRUCT
und sie zu ARRAY
enthalten. Obwohl ich den früheren Ansatz vorziehen würde.
Es sollte so aussehen:
create function(clob query, list of varchars cols) returns table
begin
execute system command(query, cols);
examine sysout from command;
return tabular data from syscmd as table;
end
quelle
Antworten:
Es ist möglich, obwohl ziemlich kompliziert, eine Pipeline-Tabellenfunktion zu schreiben , die eine variable Struktur zurückgibt . Ihre Pipeline-Tabellenfunktion könnte die beiden Argumente verwenden und die Oracle Data Cartridge-Schnittstelle und die Magie des AnyDataSet-Typs verwenden, um zur Laufzeit eine dynamische Struktur zurückzugeben. Sie können dies dann in nachfolgenden SQL-Anweisungen verwenden, als wäre es eine Tabelle, d. H.
Ein paar weitere Referenzen, die dieselbe Beispielimplementierung behandeln
quelle
Ich denke, Ihr bester Ansatz besteht darin, den Versuch, eine dynamische Tabelle zurückzusenden, abzubrechen (obwohl Sie möglicherweise eine temporäre Tabelle erstellen und einen Refcursor darauf zurückgeben können, aber ich bin mir hier nicht sicher).
Mein bevorzugter Ansatz hier wäre es, Ergebnisse in einem flexibleren Format, etwa einem XML-Dokument oder ähnlichem, zu generieren und zurückzugeben. Dies gibt Ihnen die Flexibilität, die Sie benötigen, ohne dass die Spalten nach dem Funktionsscan festgelegt werden müssen.
quelle
Sie können eine tmp-Ansicht erstellen und die Ansicht dynamisch ersetzen.
Ausführungsergebnisse:
quelle
Eine Lösung wäre, eine externe Tabelle basierend auf der Lucene-Ausgabe zu erstellen. Sie können die externe Tabellendefinition leicht ändern (und auf mehrere Dateien verweisen).
So haben Sie:
quelle