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

El valor de enlace de matriz de Oracle.DataAccess (ODP.NET) no se encuentra dentro del rango esperado

Creo que está tratando de fusionar un Array Bind {simplemente vinculando una matriz a un parámetro para que se ejecute varias veces; así es como lo hizo el ejemplo en el enlace que proporcionó} con una matriz asociativa {re:PLSQLAssociativeArray con un parámetro de ENTRADA de TABLA DE}.

Dado que no publicó su paquete/proc que está ejecutando, asumo que está haciendo algo como esto (solo dejo esto para validar la suposición)

procedure insertdata(P_JOB_TITLE IN VARCHAR2) as
begin
insert into myTable(x) value (P_JOB_TITLE);
end  insertdata;

Para ejecutar esto como el autor del artículo, debe usar ArrayBindCount ( echa un vistazo a este enlace, también tiene un ejemplo) .Esto también indica que, si tiene varios parámetros, esperará un ARRAY para cada uno.

Ahora, para que esto se ejecute para todos los P_JOB_TITLE() que pase

//this was missing in your example and MUST be there to tell ODP how many array elements to expect
cmd.ArrayBindCount = 2;

 string[] jobTitleArray = {"name1", "name1"};

OracleParameter paramNames= new OracleParameter("P_JOB_TITLE", OracleDbType.Varchar2);

   //paramNames.CollectionType = OracleCollectionType.PLSQLAssociativeArray;/*once again, you are passing in an array of values to be executed and not a pl-sql table*/

    //paramNames.Size = 2; /* this is unnecessary since it is for a plsql-associative array*/
    paramNames.Value =  jobTitleArray ;
    cmd.Parameters.Add(paramNames);

Para ver un ejemplo de plSQLAssociativeArray, eche un vistazo a los ejemplos provistos cuando instaló ODP @ %ORA_HOME%\odp.net\samples\2.x\AssocArray

y para ejemplos de enlace de matriz (a partir del enlace que proporcionó) @ %ORA_HOME%\odp.net\samples\2.x\ArrayBind