sql >> Base de Datos >  >> RDS >> Oracle

Pase una lista de enteros de C# al procedimiento almacenado de Oracle

Oracle le permite pasar matrices de valores como parámetros. Tomando prestado de esta pregunta SO y esta, puede definir un INT_ARRAY escribe así:

create or replace type CHAR_ARRAY as table of INTEGER;

Luego defina su procedimiento almacenado como:

CREATE OR REPLACE PROCEDURE product_search(
        ...
        myIds IN CHAR_ARRAY,
        ...)
AS  
    SELECT ...
    ...
    WHERE SomeIdField IN (Select column_value FROM TABLE(myIds))
    ...

Luego puede pasar la lista de valores configurando la propiedad OracleParameter.CollectionType de esta manera:

OracleParameter param = new OracleParameter();
param.OracleDbType = OracleDbType.Int32;
param.CollectionType = OracleCollectionType.PLSQLAssociativeArray;