我在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。
答案 0 :(得分:0)
LONG
自8.1.5天以来已被弃用,并且有许多限制。应不惜一切代价避免LONG
。
如果要存储超过4,000个字节的文本数据(12c中为32,000个字节),您将要使用CLOB
,而不是LONG
。