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

O valor de associação de matriz Oracle.DataAccess (ODP.NET) não está dentro do intervalo esperado


Acho que você está tentando mesclar um Array Bind {simplesmente vinculando um array a um parâmetro para que ele seja executado várias vezes - foi assim que o exemplo no link que você forneceu} com um Matriz associativa {re:PLSQLAssociativeArray com um parâmetro INPUT de TABLE OF}.

Como você não postou seu pacote/proc que está executando, estou assumindo que você está fazendo algo assim (apenas colocando isso para validar a suposição)
procedure insertdata(P_JOB_TITLE IN VARCHAR2) as
begin
insert into myTable(x) value (P_JOB_TITLE);
end  insertdata;

Para executar isso como o autor do artigo, você precisa usar ArrayBindCount ( confira este link, ele também tem um exemplo) .Isso também indica que, se você tiver vários parâmetros, esperará um ARRAY para cada um.

Agora para ter isso executado para todos os P_JOB_TITLE() que você passa
//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 um exemplo de plSQLAssociativeArray, dê uma olhada nos exemplos fornecidos quando você instalou o ODP @ %ORA_HOME%\odp.net\samples\2.x\AssocArray

e para exemplos de associação de matriz (a partir do link que você forneceu)@ %ORA_HOME%\odp.net\samples\2.x\ArrayBind