sql >> Base de Datos >  >> RDS >> Oracle

Mapeo de Oracle UDT que contiene una matriz asociativa en C#

Eso no es un tipo de datos de matriz asociativa (también conocido como "índice por tabla"); es un tipo de datos de colección y está definido en el alcance de SQL.

Las matrices asociativas solo están disponibles en el ámbito PL/SQL y se pueden definir como:

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

C# admite el paso de matrices asociativas a procedimientos almacenados usando algo como esto:

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# NO admite el paso de matrices no asociativas.

Si desea tener una colección (una matriz no asociativa) definida como miembro de un tipo definido por el usuario (UDT), deberá usar un paso intermedio para pasar una matriz asociativa y luego usar PL/SQL para convertirlo a una colección antes de asignarla al UDT. Puede envolver todo esto en un procedimiento almacenado en un paquete PL/SQL.