sql >> Databáze >  >> RDS >> Oracle

Hodnota vazby pole Oracle.DataAccess (ODP.NET) nespadá do očekávaného rozsahu

Myslím, že se pokoušíte sloučit Array Bind {jednoduše navázáním pole na parametr, aby se provedlo vícekrát – takto to udělal příklad v odkazu, který jste uvedli} s asociativním polem {re:PLSQLAssociativeArray s parametrem INPUT TABLE OF}.

Vzhledem k tomu, že jste nezveřejnili svůj balíček/proc, který spouštíte, předpokládám, že děláte něco takového (jen to odložíte, abyste potvrdili předpoklad)

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

Chcete-li to provést jako autor článku, musíte použít ArrayBindCount ( podívejte se na tento odkaz, má také příklad) .To také znamená, že pokud máte více parametrů, bude očekávat ARRAY pro každý z nich.

Nyní, aby se to provedlo pro všechny P_JOB_TITLE(), které předáte

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

Pro příklad plSQLAssociativeArray se podívejte na ukázky poskytnuté při instalaci ODP @ %ORA_HOME%\odp.net\samples\2.x\AssocArray

a pro příklady vazby pole (jako z odkazu, který jste poskytli)@ %ORA_HOME%\odp.net\samples\2.x\ArrayBind




  1. Docker Nelze se připojit k neběžícímu kontejneru

  2. Oracle SQLDeveloper na MacOS se po instalaci správné Javy neotevře

  3. Docker Compose mysql import .sql

  4. Seskupené zřetězení:Objednávání a odstraňování duplikátů