sql >> Databasteknik >  >> RDS >> Oracle

Oracle.DataAccess (ODP.NET) Array Binding Value faller inte inom det förväntade intervallet

Jag tror att du försöker slå samman en Array Bind {simply binding an array to a param to have it exekvering multi times -- this is how exemplet in the link you made it } med en Associative Array {re:PLSQLAssociativeArray med INPUT-parametern TABLE OF}.

Eftersom du inte postade ditt paket/proc som du kör, antar jag att du gör något liknande (bara att lägga ner detta för att validera antagandet)

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

För att utföra detta som författaren till artikeln måste du använda ArrayBindCount ( kolla in den här länken, den har också ett exempel) .Detta indikerar också att om du har flera parametrar kommer den att förvänta sig en ARRAY för var och en.

Nu ska detta köras för alla P_JOB_TITLE() som du skickar 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);

För ett exempel på plSQLAssociativeArray, ta en titt på exemplen som du fick när du installerade ODP @ %ORA_HOME%\odp.net\samples\2.x\AssocArray

och för arraybindningsexempel (som från länken du angav)@ %ORA_HOME%\odp.net\samples\2.x\ArrayBind




  1. Hur kan jag ansluta till en Oracle-databas från Ant med hjälp av tnsname?

  2. DATEDIFF_BIG() Exempel i SQL Server

  3. Hur man fyller i rader baserat på händelsetypdata

  4. använder lika i förening med kodtändare aktiva poster