Ich habe eine Funktion, die ein Objekt zurückgibt, das 3 Werte hat. Gibt es eine Möglichkeit, diese Funktion aus einer SELECT-Anweisung aufzurufen und jeden Wert eine andere Spalte zu haben? Ich könnte es in 3 Funktionen brechen, aber die Werte sind verwandt, also wollte ich es aus Leistungsgründen als eins behalten. (So Orakel muss nicht in der Abfrage für jede Zeile 3 sehr ähnlich komplexe Funktionen nennen.)Verwenden eines Objekttyps in einer SELECT-Anweisung in Oracle
So für:
create type test_obj is object (
a NUMBER,
b NUMBER,
c NUMBER);
create or replace function test_func (
pinput NUMBER)
return test_obj
as
begin
return test_obj(0, 0, 0);
end test_func;
Ich mag würde in der Lage sein von einer select-Anweisung zu nennen test_func , aber haben a, b und c verschiedene Spalten, ohne die Funktion mehrmals aufzurufen. Ich dachte, vielleicht so etwas wie diese, aber es funktioniert nicht:
select
iv.col1,
iv.col2,
iv.func_data.a,
iv.func_data.b,
iv.func_data.c
from
(select
mt.col1,
mt.col2,
test_func(mt.input) as func_data
from
my_table mt) iv
Gibt es eine Möglichkeit etwas in Oracle 10g zu tun, oder gibt es einen besseren Weg, um dieses Problem zu lösen?
danke! Das hat mir geholfen. – filiprem
Das Problem ist einfach mit Namensauflösung. Oracle interpretiert den ersten Teil vor dem Punkt in der SELECT-Anweisung immer als Tabellenalias oder Synonym/Paket in der Datenbank. Es überprüft nicht auch alle Spalten. Sie müssen den Namen also vollständig mit table_alias.column.attribute qualifizieren – Falco