Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Oracle.DataAccess (ODP.NET)-Array-Bindungswert liegt nicht im erwarteten Bereich

Ich denke, Sie versuchen, ein Array Bind zusammenzuführen {Ein Array einfach an einen Parameter binden, damit es mehrmals ausgeführt wird - so hat es das Beispiel in dem von Ihnen bereitgestellten Link gemacht} mit einem Assoziativen Array {re:PLSQLAssociativeArray with an INPUT param of TABLE OF}.

Da Sie Ihr Paket/Ihren laufenden Prozess nicht gepostet haben, gehe ich davon aus, dass Sie so etwas tun (nur um die Annahme zu bestätigen)

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

Um dies wie der Autor des Artikels auszuführen, müssen Sie ArrayBindCount ( Schauen Sie sich diesen Link an, er enthält auch ein Beispiel) .Dies zeigt auch an, dass bei mehreren Parametern für jeden ein ARRAY erwartet wird.

Jetzt soll dies für alle P_JOB_TITLE() ausgeführt werden, die Sie übergeben

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

Ein plSQLAssociativeArray-Beispiel finden Sie in den Beispielen, die bei der Installation von ODP @ %ORA_HOME%\odp.net\samples\2.x\AssocArray

bereitgestellt wurden

und für Array-Bind-Beispiele (wie von dem von Ihnen bereitgestellten Link) @ %ORA_HOME%\odp.net\samples\2.x\ArrayBind