Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Mapeando Oracle UDT contendo array associativo em C #


Esse não é um tipo de dados de matriz associativa (também conhecido como "índice por tabela"); é um tipo de dados de coleção e é definido no escopo SQL.

Arrays associativos estão disponíveis apenas no escopo PL/SQL e podem ser definidos como:
CREATE PACKAGE package_name AS
  TYPE STRING_MAP IS TABLE OF VARCHAR2(50) INDEX BY BINARY_INTEGER;
END;
/

C# suporta passar arrays associativos para procedimentos armazenados usando algo assim:
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# NÃO suportam a passagem de arrays não associativos.

Se você quiser ter uma coleção (um array não associativo) definido como um membro de um tipo definido pelo usuário (UDT), precisará usar uma etapa intermediária de passar um array associativo e depois usar PL/SQL para convertê-lo a uma coleção antes de atribuí-la ao UDT. Você pode agrupar tudo isso em um procedimento armazenado em um pacote PL/SQL.