Oracle
 sql >> база данни >  >> RDS >> Oracle

Съхранена процедура на Oracle и потребителски тип данни

Няма да можете да направите това лесно с отхвърлен System.Data.OracleClient но можете да използвате ODP на oracle с използване на UDT. Ако това не е опция, не съм сигурен как можете да го направите чрез параметри в C# със System.Data.

ODP идва с много примери и има примери в горните връзки.

Ще добавя още няколко връзки, които се надявам да помогнат:

  1. visual studio ODP индекс
  2. това ви показва как точно да използвате ODT, за да създадете обвивки на персонализирани класове и да ги извикате (имайте предвид, че това е по средата, те минават през него с помощта на инструмента за създаване на персонализираните типове над него в примера -- този преглед е доста задълбочен и трябва да ви отведе директно там, където трябва да бъдете)
  3. Изтегляне :сега този човек също инсталира примерни файлове, това е още един страхотен пример за това, което точно трябва да направите:веднъж инсталиран отидете до [път на директория, която инсталирате]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs

Наистина си струва да позволите на ODT инструментите за Visual Studio да създават вашите класове за вашите UDT вместо вас (напр. IOracleCustomType и подобни). след това можете да влезете в тях и да ги промените, за да отговарят на вашите нужди. след това, след като всичко е казано и направено (фрагмент от 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);

също имайте предвид, че класът Person трябва да имплементира IOracleCustomType (който може да бъде създаден, като следвате връзката в #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

Горното е за пълен персонализиран тип, но вие търсите ODP свързване на асоциативен масив:

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

ще искате да използвате

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

и всичко трябва да си дойде на мястото



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle APEX:изскачащо меню

  2. PL/SQL променливите в курсорите ефективно ли са същите като параметрите за свързване?

  3. Урок за Oracle sql:Ограничаване на набора от данни

  4. ORA-01882:регионът на часовата зона не е намерен в Entity Framework

  5. Буферира ли се dbms_output.put() различно от dbms_output.put_line()?