C # 2010, ODP.net, procedimiento almacenado de llamadas que pasa la matriz

Tengo un procedimiento almacenado PL / SQL que toma 4 entradas. Una de esas entradas es una matriz asociativa (Tipo de Oracle: Tabla del índice VARCHAR2 (1) por PLS_INTEGER).

Quiero tener un programa C # que llame a este procedimiento almacenado con las entradas adecuadas, incluida la matriz asociativa.

Estoy usando ODP.net 11.2 con Visual C # 2010 Express y Oracle 11gR2.

No puedo encontrar ningún buen ejemplo de cómo pasar una matriz a un procedimiento pl / sql desde C #. ¿Alguien puede darme un ejemplo? Seguir la Documentación de Oracle me da exactamente un error al decir Número incorrecto o tipo de argumentos.

Mi código de C #:

        OracleCommand cmd = new OracleCommand("begin sdg_test.sdg_test2(:1); end;", conn);

        OracleParameter Param1 = cmd.Parameters.Add("1", OracleDbType.Varchar2);

        Param1.Direction = ParameterDirection.Input;

        Param1.CollectionType = OracleCollectionType.PLSQLAssociativeArray;

        Param1.Value = new string[22] { "Y", "Y", "N", "Y", "N", "Y", "Y", "Y", "Y", "Y", "N", "Y", "N", "Y", "Y", "Y", "Y", "Y", "N", "Y", "N", "Y" };

        Param1.Size = 22;
        Param1.ArrayBindSize = new int[22] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };

        cmd.ExecuteNonQuery();

        conn.Close();
        conn.Dispose();

Todo lo que mi procedimiento hace es registrar un mensaje. Solo estoy tratando de hacer que este concepto funcione.

Respuestas a la pregunta(1)

Su respuesta a la pregunta