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

Mappage d'Oracle UDT contenant un tableau associatif en C#

Ce n'est pas un type de données de tableau associatif (également appelé "index par table"); il s'agit d'un type de données de collection et est défini dans la portée SQL.

Les tableaux associatifs ne sont disponibles que dans la portée PL/SQL et peuvent être définis comme :

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

C# prend en charge la transmission de tableaux associatifs aux procédures stockées en utilisant quelque chose comme ceci :

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# ne le fait PAS prend en charge le passage de tableaux non associatifs.

Si vous souhaitez qu'une collection (un tableau non associatif) soit définie comme membre d'un type défini par l'utilisateur (UDT), vous devrez utiliser une étape intermédiaire consistant à transmettre un tableau associatif, puis à utiliser PL/SQL pour le convertir. à une collection avant de l'affecter à l'UDT. Vous pouvez encapsuler tout cela dans une procédure stockée dans un package PL/SQL.