小编典典

使用12c客户端截断存储过程OUTPUT VARCHAR2值

sql

我正在使用 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.size4000但仍然值被截断了。有什么解决办法吗?在服务器上,我有 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;

阅读 212

收藏
2021-04-07

共1个答案

小编典典

我试图解决问题,通过迁移到ODP.NET作为System.Data.OracleClient正在被弃用Microsoft提到这里 ,但没有解决问题。以下是解决问题的方法:

  1. 计算机上安装的Oracle客户端版本 12.1.0.2.2
  2. Output parameter truncation错误在Oracle文档中提到为Bug21616079
  3. Oracle已按照此处的文档中12.2.0.1.0所述对版本进行了修复。Oracle
  4. 因此,为我解决此问题的方法12.2.0.1.0 已从升级到版本,12.1.0.2.2因为Oracle仅对此版本提供了修复,在官方Oracle文档中提到了此问题,我在上面提供了第3点的链接。
2021-04-07