2013-10-11 134 views
0

我在使用Oracle數據庫中的LONG數據類型檢索數據時遇到問題。在特定列處於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.1.5天開始不再使用,並且有一些限制。應該不惜一切代價避免LONG

如果要存儲超過4,000字節(12c中爲32,000字節)的文本數據,則需要使用CLOB而不是LONG

相關問題