sql >> Database >  >> RDS >> Oracle

Mapping Oracle UDT met associatieve array in C#

Dat is geen associatief array-gegevenstype (ook bekend als een "index per tabel"); het is een verzamelingsgegevenstype en wordt gedefinieerd in het SQL-bereik.

Associatieve arrays zijn alleen beschikbaar in de PL/SQL-scope en kunnen worden gedefinieerd als:

CREATE PACKAGE package_name AS
  TYPE STRING_MAP IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
END;
/

C# ondersteunt het doorgeven van associatieve arrays aan opgeslagen procedures met zoiets als dit:

OracleParameter parameter = new OracleParameter();
parameter.ParameterName  = "YourParameterName";
parameter.OracleDbType   = OracleDbType.Varchar2;
parameter.Direction      = ParameterDirection.Input;
parameter.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
parameter.Value          = new String[5]{"a","b","c","d","e"};

C# doet NIET ondersteuning voor het doorgeven van niet-associatieve arrays.

Als u een verzameling (een niet-associatieve array) wilt definiëren als een lid van een door de gebruiker gedefinieerd type (UDT), dan moet u een tussenstap gebruiken om een ​​associatieve array door te geven en vervolgens PL/SQL te gebruiken om deze te converteren aan een verzameling voordat u deze aan de UDT toewijst. U kunt dit alles in een opgeslagen procedure in een PL/SQL-pakket verpakken.




  1. Type 'MySqlConnection' is niet gedefinieerd

  2. Datums effectief converteren tussen UTC en lokale (dwz PST) tijd in SQL 2005

  3. onbekend aantal parameters in bind_param

  4. asp.net winkelrollen in sessie Roles.AddUsertoRole (niet wat ik zoek?)