【发布时间】:2011-05-15 08:53:13
【问题描述】:
我正在尝试调用一个将自定义数据类型table of numbers 作为参数之一的过程。
这里是类型的定义:
create type num_list as table of number;
以及程序的定义:
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;
使用 ODP.NET 和 C#,我声明如下:
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();
}
抛出的异常状态:
无效的参数绑定参数 名称:数字列表
在定义参数时我缺少哪些属性?
【问题讨论】:
-
嗨,你是怎么解决这个问题的?下面的答案对我不起作用。
-
尝试我在编辑后的答案中发布的链接中提供的解决方案。
-
PS 下面的答案对我有用——你不能设置 UdtTypeName 而是使用 CollectionType。
标签: c# odp.net oracle-xe user-defined-types