У меня есть этот код пакета в Oracle 12c
CREATE OR REPLACE PACKAGE Support_Data_Types AS
TYPE ttDate IS TABLE OF DATE
END Support_Data_Types;
PROCEDURE GetData
(
tabDates IN SUPPORT_DATA_TYPES.TTDATE,
)
AS
BEGIN
SELECT count(*) INTO n FROM table(tabDates);
END GetData;
Если я вызываю его из PL/SQL
кода, он работает
declare
dates SUPPORT_DATA_TYPES.TTDATE;
begin
dates(1) := To_DATE('12/31/2005','MM/DD/YYYY');
dates(2) := To_DATE('03/31/2006','MM/DD/YYYY');
dates(3) := To_DATE('06/30/2006','MM/DD/YYYY');
dates(4) := To_DATE('09/30/2006','MM/DD/YYYY');
MyPackage.GETVALUE(dates);
end;
Но если я вызываю его из ODP.NET, тогдаЯ получаю сообщение об ошибке на линии SELECT count(*) INTO n FROM table(tabDates);
ORA-21700: объект не существует или помечен для удаления
Мой код .NET
Public Function GetValue(dates As IEnumerable(Of Date))
Using connection As IDbConnection = Odp.ConnectionBuilder.CreateDatabaseConnection()
Using cmd As OracleCommand = New OracleCommand
cmd.Connection = DirectCast(connection, OracleConnection)
cmd.CommandType = CommandType.StoredProcedure
cmd.CommandText = "MyPackage.GETVALUE"
cmd.BindByName = True
Using datesParam As OracleParameter = New OracleParameter()
datesParam.ParameterName = "tabDates"
datesParam.OracleDbType = OracleDbType.Date
datesParam.CollectionType = OracleCollectionType.PLSQLAssociativeArray
datesParam.Size = dates.Count()
datesParam.Direction = ParameterDirection.Input
datesParam.Value = dates.ToArray()
cmd.Parameters.Add(datesParam)
End Using
cmd.ExecuteNonQuery()
End Using
End Using
End Function
Если я сравню с образцом кода Oracle Я не уверен, что здесь не так.
У кого-нибудь есть понимание?