【发布时间】:2017-08-08 23:24:04
【问题描述】:
我正在使用 oracle 11g。我的存储过程返回varchar2,但它的值被oracle client 截断。
以下是我的代码:
if ((ds != null) && (ds.Tables.Count > 0))
{
foreach (DataRow rw in ds.Tables[0].Rows)
{
OracleParameter param = new OracleParameter((rw["argument_name"]).ToString(), GetOracleType(rw["data_type"].ToString().ToUpper()));
param.Direction = GetParameterDirection((rw["in_out"]).ToString().ToUpper());
discoveryCommand.Parameters.Add(param);
if (param.Direction == ParameterDirection.Output && param.OracleType == OracleType.VarChar)
{
param.Size = 4000;
}
}
}
我将param.size 增加到4000,但值仍然被截断。
有没有办法解决这个问题。在服务器上我有 Oracle 12c。我需要在不更新项目中的 oracle 客户端版本的情况下获得解决方案,因为由于某些原因,这是不允许的。
下面是 SP 。我对其进行了修改以返回硬编码值。还是同样的问题。
PROCEDURE access_level (
p_emp_id IN employees.emp_id%TYPE,
p_id IN NUMBER,
p_type VARCHAR2,
p_access_level OUT VARCHAR2
) IS
BEGIN
p_access_level := 'X' || 'RO' || 'RW';
END IF;
【问题讨论】:
-
你使用什么库。你能切换到 Oracle.ManagedDataAccess 吗?首先它是本机 oracle,其次它可以让您不必打扰 app-ora 客户端数据库的匹配版本
-
不,很遗憾我不能@JuryGolubev
-
数据截断后的结果长度是多少?
-
@CodeFuller 仅限 3 个字符
-
您能否提供实际数据:从存储过程返回什么字符串以及如何截断?另外,您的过程是否实际上返回 varchar2,而不是 nvarchar2?
标签: c# sql asp.net oracle11g ado.net