2013-07-18 4 views
0

Учитывая, что у меня есть этот 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()) является: Oracle error

Что еще бесит, что я могу выполнить пример из проводника сервера - и он работает только отлично!

Пожалуйста, будьте добры и указать, где я быть шишка ....

+3

Ваш провал испорчен. Вы должны иметь курсор ref как параметр для proc и просто открыть его. Нет необходимости делать петлю/выборку. Это будет ваш код клиента. Вот ссылка (нет C# tho) - http://www.oracle-base.com/articles/misc/using-ref-cursors-to-return-recordsets.php – OldProgrammer

+0

Почему вы не вызываете 'get_report_data' напрямую ? В чем смысл процедуры обертки? –

ответ

0

Проблема с процедурой Oracle, а не C# кода. Я получил процедуру Oracle от другого разработчика, и мы скрестили наши провода. После того, как он создал OUT параметр с эталонным курсором, он работал нормально. +1 к OldProgrammer - вы должны были ответить на свой комментарий!

Смежные вопросы