I want to pass an integer array to a stored procedure via c#. the procedure works via sql developer but in c# it doesn't work. this is my code but i got stuck by the
wrong number or types of arguments in call to 'V1'
error. please help me
c# code:
DBEngine oracleEngine = new OracleEngine(connectionString);
DbCommand cmd = oracleEngine.MakeTextCmd("v1");
cmd.CommandType = CommandType.StoredProcedure;
OracleParameter param1 = new OracleParameter();
List<int> values = new List<int>() { 1, 2, 3, 4, 5 };
OracleParameter p_strings = new OracleParameter();
p_strings.ParameterName = "VehicleGroupID_Array";
p_strings.OracleDbType = OracleDbType.Int32;
p_strings.Direction = ParameterDirection.Input;
p_strings.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
p_strings.Value = new int[5]{1,2,3,4,5};
cmd.Parameters.Add(p_strings);
//DbDataReader reader = oracleEngine.ExecuteReader(cmd);
cmd.ExecuteNonQuery();
my procedure:
create or replace PROCEDURE v1
(
VehicleGroupID_Array IN INNUMARRAY -- List
)
IS
p_recordset SYS_REFCURSOR;
BEGIN
OPEN p_recordset FOR
SELECT DISTINCT
"vUserVehicles"."UserID",
"vUserVehicles"."VehicleID",
"vUserVehicles"."VehicleName",
"vUserVehicles"."VehicleSerialNo",
"vUserVehicles"."Description",
"vUserVehicles"."VehicleNo",
"vUserVehicles"."VehicleShahrbaniNo",
"vUserVehicles"."GSMWirelessDialNo",
"vUserVehicles"."Status",
"vUserVehicles"."ThurayaDialNo",
"vUserVehicles"."Company",
"vUserVehicles"."MachineModelId",
"vUserVehicles"."VehicleTypeID",
"vUserVehicles"."Consumption",
"vUserVehicles"."RegistrationCode",
"vUserVehicles"."VehicleKindId"
FROM "vUserVehicles"
INNER JOIN "VehicleGroupDetail"
ON "vUserVehicles"."VehicleID" = "VehicleGroupDetail"."VehicleID"
WHERE "VehicleGroupDetail"."VehicleGroupID" IN (
select column_value from table(VehicleGroupID_Array))
)
ORDER BY "vUserVehicles"."Description" ASC;
DBMS_SQL.RETURN_RESULT(p_recordset);
END;
and my type:
create or replace TYPE INNUMARRAY AS TABLE OF INTEGER;