Estoy intentando llamar a un procedimiento que toma un tipo de datos personalizado de table of numbers
como uno de los parámetros.Enlace no válido para Oracle UDT en el parámetro de procedimiento
Aquí es la definición del tipo:
create type num_list as table of number;
Y la definición del procedimiento:
create or replace procedure my_procedure
(listofnumbers num_list,
v_value char)
is
begin
update my_table
set my_column = v_value
where my_row_id in (select column_value
from table(listofnumbers));
end;
Usando ODP.NET y C#, Estoy declarando la siguiente manera:
var row_ids = new int[] { 1, 2 };
using (var oracleConn = new Oracle.DataAccess.Client.OracleConnection(myConnectionString))
{
oracleConn.Open();
var cmd = new Oracle.DataAccess.Client.OracleCommand("my_procedure", oracleConn);
cmd.CommandType = CommandType.StoredProcedure;
var param1 = new Oracle.DataAccess.Client.OracleParameter("listofnumbers", Oracle.DataAccess.Client.OracleDbType.Array, ParameterDirection.Input);
param1.CollectionType = Oracle.DataAccess.Client.OracleCollectionType.PLSQLAssociativeArray;
param1.UdtTypeName = "num_list";
param1.Value = row_ids;
cmd.Parameters.Add(param1);
var param2 = new Oracle.DataAccess.Client.OracleParameter("v_value ", Oracle.DataAccess.Client.OracleDbType.Char, ParameterDirection.Input);
param2.Value = "Y";
cmd.Parameters.Add(param2);
cmd.ExecuteNonQuery();
}
La excepción que se arroja estados:
Parámetro no válido enlace de parámetros nombre: ListOfNumbers
¿Qué propiedades son yo que falta en la definición del parámetro?
Hola, ¿cómo terminaste resolviendo esto? La respuesta a continuación no funcionó para mí. – Jason
Pruebe la solución que se ofrece en el enlace que publiqué en mi respuesta editada. –
PD la respuesta a continuación me funciona; no debe establecer UdtTypeName, sino usar CollectionType. –