0

我在我的 Oracle 数据库中检索具有 LONG 数据类型的数据时遇到问题。在特定列为 VARCHAR2 类型时它工作正常之前,但由于我需要更多空间来存储更大的数据,我决定改用 LONG 类型。

我正在使用存储过程检索数据,以下代码从 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;

我正在尝试使用 issueId 作为主键在 ISSUES 表中获取包含 15 列的完整行,并且在检索具有 LONG 数据类型的列时遇到问题,具体而言,我无法从中检索数据。就像我说的,在它的类型是 VARCHAR2 之前,没有任何问题,并且代码运行良好。我在这里遗漏了什么,还是 LONG 数据类型有问题?如果是这样,可能的解决方法是什么?如果可能,我仍然想使用 LONG 数据类型而不是其他类型。

补充一点,我使用的是 Visual Studio 2008 和 Oracle 11g。

4

1 回答 1

0

LONG自 8.1.5 天以来已被弃用,并且有许多限制。 LONG应不惜一切代价避免。

如果要存储超过 4,000 字节(12c 中为 32,000 字节)的文本数据,则需要使用 a CLOB,而不是 a LONG

于 2013-10-11T06:37:23.130 回答