sql >> Databáze >  >> RDS >> Oracle

Oracle Stored Procedure a vlastní datový typ

Pomocí zastaralý System.Data.OracleClient ale můžete použít ODP společnosti Oracle pomocí UDT. Pokud to není možné, nejsem si jistý, jak to můžete udělat pomocí parametrů v C# s System.Data.

ODP přichází s mnoha příklady a příklady jsou ve výše uvedených odkazech.

Chystám se přidat nějaké další odkazy, které snad pomohou:

  1. index ODP vizuálního studia
  2. toto přesně ukazuje, jak využít ODT k vytvoření vlastních obalů tříd a jejich volání (Všimněte si, že toto je v polovině, procházejí pomocí nástroje k vytvoření vlastních typů nad tím v příkladu -- tento návod je docela důkladný a měl by vás dostat přímo tam, kam potřebujete)
  3. Stáhnout :tento chlapík nyní také instaluje ukázkové soubory, toto je další skvělý příklad toho, co přesně musíte udělat:po instalaci přejděte na [cesta k adresáři, kterou instalujete]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs

Opravdu se vyplatí umožnit nástrojům ODT pro Visual studio, aby za vás vytvořily vaše třídy pro vaše UDT (např. IOracleCustomType a podobně). pak do nich můžete přejít a upravit je tak, aby vyhovovaly vašim potřebám. pak jakmile je vše řečeno a hotovo (úryvek z 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);

také si všimněte, že třída Person musí implementovat IOracleCustomType (který lze vytvořit pomocí odkazu v #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

Výše uvedené je pro úplný vlastní typ, ale hledáte vazbu ODP asociativního pole:

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

budete chtít použít

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

a vše by mělo zapadnout na místo



  1. Jak hledat řádky obsahující podřetězec?

  2. Dotaz na konkrétní hodnotu pomocí kontingenční tabulky mySQL

  3. Ověření e-mailu TSQL (bez regulárního výrazu)

  4. Omezení samoodkazování v MS SQL