Я знаю, что это возможно из базы данных для создания типа и отправки его в хранимую процедуру в качестве параметра.
Но, похоже, он не работает с приложением .net, будь то ADO.net или Nhibernate.
Версия Oracle
10г.
ODP.net
11,2
Версия сборки : 2.112.2.0
Версия продукта : 2.112.2.0
DLL : Oracle.DataAccess.dll
Тип, созданный в ORACLE
создать или заменить TYPE NUMBER_ARRAY IS TABLE OF NUMBER;
Хранимая процедура
создать или заменить PROCEDURE odp_varray_sample_proc_test (параметр IN NUMBER_ARRAY)
ЯВЛЯЕТСЯ
НАЧАТЬ
вставить в сотрудника (emp_id, emp_name, emp_password, is_captain, no_of_mom)
значения (45455, «Адам», «123545», «Y», 0);
END odp_varray_sample_proc_test;
C # код
ISQLQuery query = eventhistorysession.CreateSQLQuery ("BEGIN odp_varray_sample_proc_test (: param); END;");
query.SetParameter ("param", новый Int64 [] {259688}, новый Int64ArrayType ());
int final = query.ExecuteUpdate ();
Исключение
NHibernate.Exceptions.GenericADOException был пойман
Сообщение = "не удалось выполнить собственный запрос на массовые манипуляции: BEGIN odp_varray_sample_proc_test (: param); END; [SQL: BEGIN odp_varray_sample_proc_test (: p0); END;]"
Источник = "NHibernate"
SqlString = "BEGIN odp_varray_sample_proc_test (: p0); END;"
Трассировки стека:
в NHibernate.Engine.Query.NativeSQLQueryPlan.PerformExecuteUpdate (QueryParameters queryParameters, сеанс ISessionImplementor)
в NHibernate.Impl.SessionImpl.ExecuteNativeUpdate (NativeSQLQuerySpecification nativeQuerySpecification, QueryParameters queryParameters)
в NHibernate.Impl.SqlQueryImpl.ExecuteUpdate ()
в TestDatabase.Program.InsertNhibernate () в C: \ Jaroori Kachra \ TestDatabase \ TestDatabase \ Program.cs: строка 184
InnerException: Oracle.DataAccess.Client.OracleException
Сообщение = "ORA-06550: строка 1, столбец 7: \ nPLS-00306: неверный номер или типы аргументов при вызове 'ODP_VARRAY_SAMPLE_PROC_TEST' \ nORA-06550: строка 1, столбец 7: \ nPL / SQL: оператор игнорируется"
Источник = "Поставщик данных Oracle для .NET"
ErrorCode = -2147467259
DataSource = "RACDV"
Number = 6550
Процедура = «»
Трассировки стека:
в Oracle.DataAccess.Client.OracleException.HandleErrorHelper (Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Object src, строковая процедура, логический bCheck)
в Oracle.DataAccess.Client.OracleException.HandleError (Int32 errCode, OracleConnection conn, строковая процедура, IntPtr opsErrCtx, OpoSqlValCtx * pOpoSqlValCtx, Object src, Boolean bCheck)
в Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery ()
в NHibernate.AdoNet.AbstractBatcher.ExecuteNonQuery (IDbCommand cmd)
в NHibernate.Engine.Query.NativeSQLQueryPlan.PerformExecuteUpdate (QueryParameters queryParameters, сеанс ISessionImplementor)
InnerException: