Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Gespeicherte Oracle-Prozedur und benutzerdefinierter Datentyp

Mit dem veraltetes System.Data.OracleClient Sie können jedoch Oracles ODP verwenden mit der Verwendung von UDTs. Wenn dies nicht möglich ist, bin ich mir nicht sicher, wie Sie dies über Parameter in C# mit System.Data.

tun können

ODP kommt mit vielen Beispielen und es gibt Beispiele in den obigen Links.

Ich werde einige weitere Links hinzufügen, die hoffentlich helfen werden:

  1. Visual Studio ODP-Index
  2. dies zeigt Ihnen genau, wie Sie das ODT verwenden, um Ihre benutzerdefinierten Klassen-Wrapper zu erstellen und sie aufzurufen (Beachten Sie, dass dies auf halbem Weg ist, sie gehen durch die Verwendung des Tools, um die benutzerdefinierten Typen darüber im Beispiel zu erstellen – diese exemplarische Vorgehensweise ist ziemlich gründlich und sollte Sie direkt dorthin bringen, wo Sie sein müssen)
  3. Herunterladen :Jetzt installiert dieser Typ auch Beispieldateien, dies ist ein weiteres großartiges Beispiel dafür, was genau Sie tun müssen:Nach der Installation gehen Sie zu [Verzeichnispfad, den Sie installieren]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs

Es lohnt sich wirklich, den ODT-Tools für Visual Studio zu erlauben, Ihre Klassen für Ihre UDTs für Sie zu erstellen (z. B. IOracleCustomType und dergleichen). Sie können dann darauf eingehen und sie an Ihre Bedürfnisse anpassen. dann ist alles gesagt und getan (Ausschnitt aus object1.cs):

    Person p1   = new Person();
p1.Name     = "John";
p1.Address  = "Address1";
p1.Age = 20;

// Establish a connection to Oracle
OracleConnection con = new OracleConnection(constr);
con.Open();

// Update Person object and insert it into a database table
OracleCommand cmd = new OracleCommand(sql1, con);
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter param1 = new OracleParameter();

param1.OracleDbType   = OracleDbType.Object;
param1.Direction      = ParameterDirection.InputOutput;

// Note: The UdtTypeName is case-senstive
param1.UdtTypeName     = "SCOTT.ODP_OBJ1_SAMPLE_PERSON_TYPE";   
param1.Value           = p1;

cmd.Parameters.Add(param1);

Beachten Sie auch, dass die Person-Klasse IOracleCustomType implementieren muss (die erstellt werden kann, indem Sie dem Link in #2 folgen)

/* Person Class
   An instance of a Person class represents an ODP_OBJ1_SAMPLE_PERSON_TYPE object
   A custom type must implement INullable and IOracleCustomType interfaces
*/
public class Person : INullable, IOracleCustomType

Das Obige gilt für einen vollständig benutzerdefinierten Typ, aber Sie suchen nach einer assoziativen Array-ODP-Bindung:

http://weblogs.asp .net/ricardoperes/archive/2009/05/14/odp-net-associative-arrays.aspx

Sie verwenden möchten

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

und alles sollte zusammenpassen