2013-10-11 6 views
0

У меня возникают проблемы с получением данных с LONG-типом данных в моей базе данных Oracle. Прежде чем он работал нормально, когда конкретный столбец находится в типе VARCHAR2, но поскольку мне нужно больше места для хранения больших данных, я решил вместо этого использовать LONG.Получение длинного типа данных с использованием хранимых процедур в Oracle

Я извлечение данных с помощью хранимой процедуры, следующий код вызывает хранимую процедуру из C#:

internal static Issue GetIssueById(int issueId) 
    { 
     List<OracleParameter> p = new List<OracleParameter>(); 

     // params 
     p.Add(new OracleParameter("p_IssueId", OracleDbType.Varchar2, issueId, ParameterDirection.Input)); 
     p.Add(new OracleParameter("p_Cursor", OracleDbType.RefCursor, ParameterDirection.Output)); 

     // perform get 
     using (DataTable dt = OracleDataAccessor.ExecuteDataTable(
      ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString, 
      CommandType.StoredProcedure, 
      "sp_Issues_GetByIssueId", 
      p.ToArray())) 
     { 
      if (dt.Rows.Count < 1) 
      { 
       // could not get new id 
       throw new Exception("Could not find issue with Id: " + issueId); 
      } 
      else 
      { 
       // get new Issue 
       return new Issue(dt.Rows[0]); 
      } 
     } 

И вот хранимая процедура:

create or replace 
Procedure sp_Issues_GetByIssueId 
(
     p_IssueId IN Number, 
     p_Cursor OUT Sys_RefCursor 
) 
IS 

BEGIN 

    OPEN p_Cursor FOR 
    SELECT * FROM Issues i 
    WHERE i.IssueId = p_IssueId; 

END sp_Issues_GetByIssueId; 

Я пытаюсь получить полную строку в таблице ISSUES с 15 столбцами с использованием issueId в качестве первичного ключа, и у меня возникают проблемы с получением столбца с типом данных LONG, чтобы быть конкретным, я не могу извлечь данные из него. Как я уже сказал, раньше, когда его тип был VARCHAR2, проблем не было, и код работал отлично. Я что-то пропустил здесь, или что-то не так с типом данных LONG? Если да, то какова возможная работа? Если возможно, я по-прежнему хочу использовать тип данных LONG вместо других типов.

Чтобы добавить, я использую Visual Studio 2008 и Oracle 11g.

ответ

0

LONG был устаревшим с 8.15 дня и имеет ряд ограничений. LONG следует избегать любой ценой.

Если вы хотите сохранить текстовые данные более 4000 байт (32 000 байт в 12c), вы хотите использовать CLOB, а не LONG.

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