sql >> Databasteknik >  >> RDS >> Oracle

Oracle Stored Procedure och anpassad datatyp

Du kommer inte att kunna göra detta enkelt med utfasad System.Data.OracleClient men du kan använda oracles ODP med hjälp av UDT. Om det inte är ett alternativ är jag osäker på hur du kan göra det via parametrar i C# med System.Data.

ODP kommer med många exempel och det finns exempel i länkarna ovan.

Jag kommer att lägga till några fler länkar som förhoppningsvis kommer att hjälpa:

  1. visual studio ODP index
  2. det här visar dig exakt hur du använder ODT för att skapa anpassade klassomslag och anropa dem (observera att detta är halvvägs, de går igenom med hjälp av verktyget för att skapa de anpassade typerna ovanför det i exemplet -- den här genomgången är ganska grundlig och bör ta dig direkt dit du behöver vara)
  3. Ladda ner :nu installerar den här killen också exempelfiler, det här är ännu ett fantastiskt exempel på exakt vad du behöver göra:en gång installerad gick till [katalogsökväg du installerar]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs

Det lönar sig verkligen att låta ODT-verktygen för Visual studio skapa dina klasser för dina UDT:er åt dig (t.ex. IOracleCustomType och sådant). du kan sedan gå in i dem och ändra dem så att de passar dina behov. sedan när allt är sagt och gjort (utdrag från 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);

Observera också att Person-klassen måste implementera IOracleCustomType (som kan skapas genom att följa länken i #2)

/* 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

Ovanstående är för en fullständig anpassad typ, men du är ute efter en associativ array ODP-bindning:

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

du vill använda

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

och allt borde falla på plats



  1. Gå igenom kolumner i RECORD

  2. Räkna dubbletter av poster i Mysql-tabellen?

  3. Lagra bilder i en databas

  4. En stor sak:SQL Server 2016 Service Pack 1