Oracle
 sql >> Database >  >> RDS >> Oracle

Mappatura di Oracle UDT contenente array associativo in C#

Questo non è un tipo di dati array associativo (noto anche come "indice per tabella"); è un tipo di dati di raccolta ed è definito nell'ambito SQL.

Gli array associativi sono disponibili solo nell'ambito PL/SQL e possono essere definiti come:

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

C# supporta il passaggio di array associativi alle stored procedure utilizzando qualcosa del genere:

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# fa NON supporta il passaggio di array non associativi.

Se vuoi avere una raccolta (un array non associativo) definito come membro di un tipo definito dall'utente (UDT), dovrai utilizzare un passaggio intermedio per passare un array associativo e quindi utilizzare PL/SQL per convertirlo a una raccolta prima di assegnarla all'UDT. Puoi racchiudere tutto questo in una procedura memorizzata in un pacchetto PL/SQL.