РЕДАКТИРОВАТЬ: 14 мая
Поскольку мой ответ не был принят, вот ссылка, которая может быть полезна:
http://developergeeks.com/article/35/working-with-user-defined-type-oracle-udt-and-custom-type-using-odp-net-11g
К сожалению, я не могу поиграть с этим, поскольку у меня есть x64 ODP.NET, который не поддерживает UDT.
Однако, поскольку ваш UDT является коллекцией, вы пытались установить свойство Size в param1?
param1.Size = row_ids.Length;
Теперь это не UDT, но вот фрагмент кода, как я связываюсь с типом, определенным в спецификации пакета как:
TYPE t_stringlist IS TABLE OF VARCHAR2(4000);
string[] values = new string[] { "AAA", "BBB" };
OracleParameter parameter = new OracleParameter();
parameter.Name = "my_param";
parameter.CollectionType = OracleCollectionType.PLSQLAssociativeArray;
parameter.OracleDbType = OracleDbType.Varchar2;
parameter.ArrayBindSize = new int[values.Length];
parameter.ArrayBindStatus = new OracleParameterStatus[values.Length];
parameter.Size = values.Length;
for (int i = 0; i < values.Length; ++i)
{
parameter.ArrayBindSize[i] = 4000;
parameter.ArrayBindStatus[i] = OracleParameterStatus.Success;
}
parameter.Value = values;
Я не уверен, чтозначения, которые вы можете установить для ArrayBindSize.
Кроме того, вы можете рассмотреть возможность создания фабрики типов для вашего UDT:
http://download.oracle.com/docs/html/E15167_01/featUDTs.htm
В любом случае, я надеюсь, что вы найдете здесь что-топомогает.