sql >> Database >  >> RDS >> Oracle

Een Oracle-procedure aanroepen met een PL/SQL-verzamelingstypeparameter via .NET

Procedure-aanroep via ODP.NET ondersteunt alleen associatieve arrays, d.w.z. met INDEX BY ... , Geneste tabellen worden niet ondersteund.

Een oplossing is om in uw mondelinge procedure om te zetten:

CREATE OR REPLACE PACKAGE test_package_gkeu IS

    TYPE test_type IS TABLE OF NUMBER;    
    TYPE test_type_associative IS TABLE OF NUMBER INDEX BY INTEGER;

PROCEDURE TEST1 (pvTest IN test_type_associative ) IS

v test_type := test_type();
BEGIN
   v.Extend(pvTest.COUNT);
   for i in pvTest.First..pvTest.Last loop
       v(i) := pvTest(i)
   end loop;

select *
into ...
from receiver r
where r.receiverid MEMBER OF (v);

END;

Houd voor DML-statements ook rekening met het volgende:

FORALL i IN INDICES OF pvTest 
    INSERT INTO MY_TABLE (COL_A)
    VALUES (pvTest(i));

or 

FORALL i IN INDICES OF pvTest 
    DELETE FROM receiver 
    WHERE receiverid  = pvTest(i);



  1. Omgaan met het maken van indexen met MongoEngine in Python

  2. Hoe kan ik een batch invoegen in een Oracle-database met Python?

  3. Tabelvariabele maken in MySQL

  4. Dynamische kolommen naar rijen transponeren