Je tente d'appeler une procédure qui prend un type de données personnalisé table of numbers
comme l'un des paramètres.Liaison non valide pour Oracle UDT dans le paramètre de procédure
Voici la définition du type:
create type num_list as table of number;
Et la définition de la procédure:
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;
En utilisant ODP.NET et C#, je déclarais comme suit:
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();
}
L'exception étant les états: jetés
Paramètre non valide Nom du paramètre de liaison : listofnumbers
Quelles sont les propriétés suis-je manque dans la définition du paramètre?
Salut, comment avez-vous fini par résoudre cela? La réponse ci-dessous n'a pas fonctionné pour moi. – Jason
Essayez la solution proposée dans le lien que j'ai posté dans ma réponse éditée. –
PS la réponse ci-dessous fonctionne pour moi - vous ne devez pas définir le UdtTypeName mais utiliser plutôt le CollectionType. –