Учитывая, что у меня есть этот Oracle хранимой процедуры (это тестовый пример)хранимой процедуры/SYS_REFCURSOR - неверное число аргументов
PROCEDURE dave IS
dave_data SYS_REFCURSOR;
v_col1 NUMBER;
v_col2 VARCHAr2(100);
BEGIN
DBMS_OUTPUT.ENABLE(2000000);
dave_truck_ticket.get_report_data(dave_data,1234,'01-JUL-13','15-Jul-13');
LOOP
FETCH dave_data INTO v_col1, v_col2;
EXIT WHEN dave_data%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(v_col1||' - '||v_col2);
END LOOP;
CLOSE dave_data;
END;
И ДА ошибка только может быть в хранимой процедуре, - как я никогда прикоснулся Oracle до ..
Я пытаюсь читать данные из курсора (dave_data) таким способом:
O.OracleConnection objConn = new O.OracleConnection("DATA SOURCE=XXXDEV.WORLD;USER ID=XXXXXX;PASSWORD=XXXXXX;");
O.OracleCommand objCmd = new O.OracleCommand();
objCmd.Connection = objConn;
objCmd.CommandText = "DAVE";
objCmd.CommandType = System.Data.CommandType.StoredProcedure;
O.OracleParameter cursor = new O.OracleParameter("dave_data", O.OracleDbType.RefCursor);
cursor.Direction = System.Data.ParameterDirection.Output;
objCmd.Parameters.Add(cursor);
try
{
objConn.Open();
O.OracleDataReader objReader = objCmd.ExecuteReader();
objReader.Read();
objReader[0].ToString();
My O. ссылка задается как: с использованием O = Oracle.DataAccess.Client; (Версия 4.112.3.0)
Ошибка я получаю (непосредственно после ExecuteReader()) является:
Что еще бесит, что я могу выполнить пример из проводника сервера - и он работает только отлично!
Пожалуйста, будьте добры и указать, где я быть шишка ....
Ваш провал испорчен. Вы должны иметь курсор ref как параметр для proc и просто открыть его. Нет необходимости делать петлю/выборку. Это будет ваш код клиента. Вот ссылка (нет C# tho) - http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php – OldProgrammer
Почему вы не вызываете 'get_report_data' напрямую ? В чем смысл процедуры обертки? –