Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Passe uma lista de inteiros de C# para o procedimento armazenado do Oracle


O Oracle permite que você passe arrays de valores como parâmetros. Tomando emprestado desta pergunta SO e esta, você pode definir um INT_ARRAY digite assim:
create or replace type CHAR_ARRAY as table of INTEGER;

Em seguida, defina seu procedimento armazenado como:
CREATE OR REPLACE PROCEDURE product_search(
        ...
        myIds IN CHAR_ARRAY,
        ...)
AS  
    SELECT ...
    ...
    WHERE SomeIdField IN (Select column_value FROM TABLE(myIds))
    ...

Você pode então passar a lista de valores definindo a propriedade OracleParameter.CollectionType assim:
OracleParameter param = new OracleParameter();
param.OracleDbType = OracleDbType.Int32;
param.CollectionType = OracleCollectionType.PLSQLAssociativeArray;