sql >> Database >  >> RDS >> Oracle

Oracle Stored Procedure en aangepast gegevenstype

Je zult dit niet gemakkelijk kunnen doen met de verouderde System.Data.OracleClient maar u kunt gebruik maken van Oracle's ODP met behulp van UDT's. Als dat geen optie is, weet ik niet hoe je dat kunt doen via parameters in C# met System.Data.

ODP komt met veel voorbeelden en er zijn voorbeelden in de bovenstaande links.

Ik ga nog wat links toevoegen die hopelijk zullen helpen:

  1. visual studio ODP-index
  2. dit laat je precies zien hoe je de ODT kunt gebruiken om je customclass wrappers te maken en ze aan te roepen (houd er rekening mee dat dit halverwege is, ze lopen door met behulp van de tool om de aangepaste typen erboven in het voorbeeld te maken - deze walkthrough is behoorlijk grondig en zou je direct moeten brengen waar je moet zijn)
  3. Downloaden :nu installeert deze man ook voorbeeldbestanden, dit is weer een geweldig voorbeeld van wat je precies moet doen:eenmaal geïnstalleerd ga je naar [mappad dat je installeert]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs

Het loont echt de moeite om de ODT-tools voor Visual studio uw klassen voor uw UDT's voor u te laten maken (bijv. IOracleCustomType en dergelijke). u kunt er vervolgens op ingaan en ze aanpassen aan uw behoeften. dan is alles gezegd en gedaan (fragment uit 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);

merk ook op dat de klasse Person IOracleCustomType . moet implementeren (die kan worden gemaakt door de link in #2 te volgen)

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

Het bovenstaande is voor een volledig aangepast type, maar u zoekt een associatieve array-ODP-binding:

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

die je wilt gebruiken

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

en alles zou op zijn plaats moeten vallen



  1. com.microsoft.sqlserver.jdbc.SQLServerException:de TCP/IP-verbinding met de host localhost, poort 1433 is mislukt

  2. gebruik WHERE CLAUSE voor zoekgegevens van A-datum tot B-datum

  3. Waarom kaders gebruiken? Overtuig me dat ik Zend Framework moet uitvinden en gebruiken

  4. Waarom gebruikt MySQL geen index voor een groter dan vergelijking?