Oracle
 sql >> Base de données >  >> RDS >> Oracle

Procédure stockée Oracle et type de données personnalisé

Vous ne pourrez pas le faire facilement avec le System.Data.OracleClient obsolète mais vous pouvez utiliser ODP d'oracle avec l'utilisation d'UDT. Si ce n'est pas une option, je ne sais pas comment vous pouvez le faire via des paramètres en C# avec System.Data.

ODP est livré avec de nombreux exemples et il y a des exemples dans les liens ci-dessus.

Je vais ajouter quelques liens supplémentaires qui, je l'espère, vous aideront :

  1. index ODP Visual Studio
  2. cela vous montre exactement comment utiliser l'ODT pour créer vos enveloppes de classes personnalisées et les appeler (notez que c'est à mi-chemin, ils utilisent l'outil pour créer les types personnalisés ci-dessus dans l'exemple -- cette procédure pas à pas est assez complète et devrait vous amener directement là où vous devez être)
  3. Télécharger :maintenant, ce type installe également des exemples de fichiers, c'est un autre exemple formidable de ce que vous devez faire :une fois installé, accédez à [chemin du répertoire que vous installez]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs

Il est vraiment avantageux de permettre aux outils ODT pour Visual Studio de créer vos classes pour vos UDT pour vous (par exemple, IOracleCustomType et autres). vous pouvez ensuite les consulter et les modifier en fonction de vos besoins. puis une fois que tout est dit et fait (extrait de 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);

notez également que la classe Person doit implémenter IOracleCustomType (qui peut être créé en suivant le lien en #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

Ce qui précède concerne un type personnalisé complet, mais vous recherchez une liaison ODP de tableau associatif :

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

vous voudrez utiliser

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

et tout devrait se mettre en place