Laden...

Rückgabewert einer PL/SQL-Funktion vom Typ Record

Erstellt von newsunflower vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.643 Views
N
newsunflower Themenstarter:in
23 Beiträge seit 2007
vor 14 Jahren
Rückgabewert einer PL/SQL-Funktion vom Typ Record

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é

D
211 Beiträge seit 2006
vor 14 Jahren

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

N
newsunflower Themenstarter:in
23 Beiträge seit 2007
vor 14 Jahren

Danke, aber das löst mein Problem nicht. Ich will ja keine Ergebnismenge zurück, sondern einen zusammengesetzten Datentyp.

Lg
René

D
211 Beiträge seit 2006
vor 14 Jahren

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

N
newsunflower Themenstarter:in
23 Beiträge seit 2007
vor 14 Jahren

so habe ich es jetzt gemacht... finde ich sogar noch ein tick besser...

danke dir für den tipp..

lg
rene

D
211 Beiträge seit 2006
vor 14 Jahren

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