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

Il valore di associazione dell'array Oracle.DataAccess (ODP.NET) non rientra nell'intervallo previsto

Penso che tu stia cercando di unire un Array Bind {semplicemente legare un array a un parametro per farlo eseguire più volte -- ecco come l'esempio nel link che hai fornito lo ha fatto} con un array associativo {re:PLSQLAssociativeArray con un parametro INPUT di TABLE OF}.

Dal momento che non hai pubblicato il tuo pacchetto/proc che stai eseguendo, presumo che tu stia facendo qualcosa del genere (solo mettendolo giù per convalidare l'ipotesi)

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

Per eseguire questa operazione come l'autore dell'articolo è necessario utilizzare ArrayBindCount ( dai un'occhiata a questo link, c'è anche un esempio) .Questo indica anche che se hai più parametri, si aspetterà un ARRAY per ciascuno.

Ora per eseguire questo per tutti i P_JOB_TITLE() che passi in

//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);

Per un esempio di plSQLAssociativeArray, dai un'occhiata agli esempi forniti quando hai installato ODP @ %ORA_HOME%\odp.net\samples\2.x\AssocArray

e per esempi di array bind (come dal link che hai fornito)@ %ORA_HOME%\odp.net\samples\2.x\ArrayBind