verwendetes Datenbanksystem: Oracle 10g
Hallo,
ich benötige mal wieder Eure Hilfe. Ich programmiere mit C# und möchte auf die eine PL/SQL-Funktion zugreifen.
function getMandant
(
in_mandant number
)
return mandant_info_t;
Als Rückgabewert liefert die Funktion ein Record, der wie folgt definiert ist.
type mandant_info_t is record
(
name company.name%type,
zipcode company.zipcode%type,
city company.city%type,
street company.street%type,
streetno company.streetno%type
);
Funktion und Record sind in einem gemeinsamen Package definiert.
Mein bisheriger Ansatz für den Aufruf dieser Funktion ist:
param[0] = new OracleParameter("res", OracleDbType.???, ParameterDirection.ReturnValue);
param[1] = new OracleParameter("in_mandant", OracleDbType.Int32, Mandant, ParameterDirection.Input);
OracleCommand cmd = new OracleCommand("CorePgk.getMandant", m_conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(param);
cmd.ExecuteNonQuery();
Wobei ich Probleme bei dem Rückgabewert vom Typ Record habe. Welchen OracleDbType muss ich hier angeben. Record ist nicht mit in der Aufzählung enthalten. Wie werden Rückgabewerte vom Typ Record behandelt?
Danke für Eure Antworten…
Lg
René
Hi,
unsere SP in Oracle haben einen sys_refcursor als Rückgabewert für die Datenmenge.
Unsere Parameter sehen wie folgt aus:
parameter.Direction = ParameterDirection.InputOutput;
parameter.OracleDbType = OracleDbType.RefCursor;
Gruß
DevHB
Danke, aber das löst mein Problem nicht. Ich will ja keine Ergebnismenge zurück, sondern einen zusammengesetzten Datentyp.
Lg
René
Hi,
oh Mist verlesen.
Afaik geht das mit Oracle nicht bzw. wird nicht unterstützt.
Kannst Du die Function nicht in eine TVF umbauen, sodass Du mit
"SELECT * FROM TABLE(Function)" arbeiten kannst?
Gruß
DevHB
so habe ich es jetzt gemacht... finde ich sogar noch ein tick besser...
danke dir für den tipp..
lg
rene
Hi,
wenn Du die Wahl hast, würde ich nen Sys_RefCursor empfehlen.
Wir haben den in unseren SPs verwendet, funktioniert wunderbar und ist performant.
Gruß
DevHB