Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Procedura składowana Oracle i niestandardowy typ danych

Nie będziesz w stanie tego łatwo zrobić za pomocą przestarzałe System.Data.OracleClient ale możesz użyć ODP Oracle z wykorzystaniem UDT. Jeśli to nie jest opcja, nie jestem pewien, jak możesz to zrobić za pomocą parametrów w C# za pomocą System.Data.

ODP zawiera wiele przykładów i są to przykłady w powyższych linkach.

Dodam więcej linków, które miejmy nadzieję pomogą:

  1. indeks ODP studia wizualnego
  2. pokazuje to dokładnie, jak wykorzystać ODT, aby utworzyć niestandardowe wrappery klas i wywoływać je (pamiętaj, że jest to w połowie, przechodzą za pomocą narzędzia do tworzenia niestandardowych typów powyżej w przykładzie -- ten przewodnik jest dość dokładny i powinien doprowadzić Cię bezpośrednio tam, gdzie musisz)
  3. Pobierz :teraz ten facet również instaluje przykładowe pliki, to jest kolejny wspaniały przykład tego, co musisz zrobić:po zainstalowaniu goto [ścieżka katalogu, którą instalujesz]..\product\11.2.0\client_1\odp.net\samples\4\UDT\object1.cs

Naprawdę opłaca się pozwolić narzędziom ODT dla Visual studio tworzyć dla Ciebie klasy dla Twoich UDT (np. IOracleCustomType i tym podobne). możesz następnie wejść do nich i zmienić je zgodnie z własnymi potrzebami. potem wszystko jest już powiedziane i zrobione (fragment 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);

pamiętaj też, że klasa Person musi implementować IOracleCustomType (które można utworzyć, klikając link w punkcie 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

Powyższe dotyczy pełnego typu niestandardowego, ale szukasz powiązania tablicy asocjacyjnej ODP:

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

będziesz chciał użyć

param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

i wszystko powinno się ułożyć



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. wyzwalacze edycji krzyżowej do przodu w R12.2

  2. Co to jest typ danych Oracle MLSLABEL?

  3. Jak pomnożyć wartości za pomocą SQL

  4. Procedura składowana wywołań PHP-OCI z parametrami

  5. Jak zsynchronizować metodę java wywoływaną przez PL/SQL