Как вызвать функцию Oracle с помощью Ref Cursor в качестве выходного параметра из C #?

Я использую продукт, который предоставляет API базы данных на основе функций Oracle, и я могу вызывать функции через ODP.NET в общем. Однако я не могу понять, как вызвать функцию, которая включает Ref Cursor как Out-параметр. Все образцы, которые я нашел до сих пор, либо вызывают процедуру с параметром Out, либо функцию с указателем Ref Cursor в качестве возвращаемого значения. Я попытался определить параметры аналогичным образом, но продолжаю получать ошибку о том, что предоставлено неправильное количество или тип параметров.

Вот заголовок функции (явно запутанный):

FUNCTION GetXYZ(
   uniqueId       IN   somepackage.Number_Type,
   resultItems    OUT  somepackage.Ref_Type)
   RETURN somepackage.Error_Type;

Это определения типов в "somepackage":

SUBTYPE Number_Type IS NUMBER(13);
TYPE Ref_Type IS REF CURSOR;
SUBTYPE Error_Type IS NUMBER;

И это код, который я пробовал:

string sql = "otherpackage.GetXYZ";
var getXYZCmd = OracleCommand oracleConnection.CreateCommand(sql);
getXYZCmd.CommandType = CommandType.StoredProcedure;

getXYZCmd.Parameters.Add("uniqueId", OracleDbType.Int32).Value = uniqueExplosionId;
getXYZCmd.Parameters.Add("resultItems", OracleDbType.RefCursor).Direction = ParameterDirection.Output;
getXYZCmd.Parameters.Add("return_value", OracleDbType.Int32).Direction = ParameterDirection.ReturnValue;

Я пробовал следующие разные способы вызова функции (конечно, только по одному):

var result = getXYZCmd.ExecuteNonQuery();
var reader = getXYZCmd.ExecuteReader();
var scalarResult = getXYZCmd.ExecuteScalar();

Но каждый из них выдает сообщение об ошибке:

Oracle.DataAccess.Client.OracleException: ORA-06550: line 1, column 15:
PLS-00306: wrong number or types of arguments in call to 'GETXYZ'
ORA-06550: line 1, column 15:
PLS-00306: wrong number or types of arguments in call to 'GETXYZ'
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored.

Итак, вообще возможно ли вызвать функцию с Ref Cursor как Out-параметром из C # с ODP.NET? Я могу без проблем вызвать функцию с такой же структурой с параметром Varchar2-Out вместо Ref Cursor ...

Кстати, я использую ODP.NET версии 2.112.2.0 из C # .NET 3.5 в Visual Studio 2008.

Заранее благодарим за помощь!

6
задан Martin Klinke 15 June 2011 в 15:29
поделиться