我正在使用 oracle 11g 。我的存储过程正在返回,varchar2但其值被截断oracle client。下面是我的代码:
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客户端版本的情况下获得解决方案,因为某些原因,这是不允许的。
param.size
4000
以下是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;
我试图解决问题,通过迁移到ODP.NET作为System.Data.OracleClient正在被弃用Microsoft提到这里 ,但没有解决问题。以下是解决问题的方法:
ODP.NET
System.Data.OracleClient
Microsoft
12.1.0.2.2
Output parameter truncation
Oracle
Bug21616079
12.2.0.1.0