2009-07-31 2 views
0

Я использую ODP.NET (переход от поставщика Microsoft), и я застрял в хранимой процедуре, которая возвращает refcursor. У меня есть следующие/процедура PL SQL (я изменил его немного, чтобы сделать его более общим):Проблема с Oracle RefCursor

PROCEDURE MyProc(parameter_no1 IN NUMBER, parameter_no2 IN NUMBER, RETCURSOR OUT ret_type) AS 
BEGIN 
    OPEN RETCURSOR FOR 
    SELECT ad.logo logo 
    FROM tab_a a, tab_h h 
    WHERE a.id IS NOT NULL 
    AND a.h_id = h.id 
    AND a.no1 = parameter_no1 
    AND a.no2= parameter_no2; 
END HanteraLogotype; 

А потом у меня есть folloing C# код для вызова его:

internal void RefCursorDataReader() 
{ 
    OracleCommand cmd = new OracleCommand("ABC$MYPACKAGE.MyProc", new OracleConnection(_constr)); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.Connection.Open(); 
    cmd.BindByName = true; 

    OracleParameter p = cmd.Parameters.Add("parameter_no1", OracleDbType.Decimal); 
    p.Value = 12345678; 
    p.Direction = ParameterDirection.Input; 

    p = cmd.Parameters.Add("parameter_no2", OracleDbType.Decimal); 
    p.Value = 123456; 
    p.Direction = ParameterDirection.Input; 

    p = cmd.Parameters.Add("RETCURSOR", OracleDbType.RefCursor); 
    p.Direction = ParameterDirection.Output; 

    OracleDataReader reader = cmd.ExecuteReader(); 

    if (reader.Read()) 
    { 
    System.Diagnostics.Debug.WriteLine(reader[0].GetType().ToString()); 
    } 

    cmd.Connection.Close(); 
} 

И когда я запускаю это, я получаю это исключение:

ORA-03106: фатальная ошибка протокола связи двух задач

Я пробовал множество различных вариантов параметров, их тип, порядок и т. Д., Но ничего не помогает. Это исключение составляет reader.Read(). Я бы очень признателен за помощь в этом!

Добавлено: ret_type определяется как:

ТИП ret_type IS REF CURSOR;

+0

Тип логотипа LONG RAW , и это, кажется, проблема. Если я изменю его на число, он будет работать. – kaze

+0

Ах, LONG типы данных были устаревшими в Oracle 8, я полагаю. LOB заменил их. –

ответ

1

Это похоже на ошибку. Ошибка 3106 - это плохая ошибка, которой никогда не должно быть. Я уверен, что есть обходное решение!

Лучшее место для запроса вопросов ODP.NET завершено на форуме OTN ODP.NET. Если бы я тебя, я бы этот пост там:

http://forums.oracle.com/forums/forum.jspa?forumID=146&start=0

поиск Также этот конкретный форум для «3106»

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