当前位置: 首页 > 面试题库 >

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

史朗
2023-03-14
问题内容

我正在使用 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;

问题答案:

我试图解决问题,通过迁移到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点的链接。


 类似资料:
  • 客户端存储

  • 在 osb 12 c. PLS-00653 中调用服务中的存储过程调用管道时遇到错误:PL/SQL 作用域中不允许使用聚合/表函数。如果有人以前遇到过或可以在这里提供帮助?

  • 我们的产品有几个复杂的存储过程,它们利用(MSSQLS2008R2/2012)CTE和/或临时表/表变量来计算菜单或级联权限结构,以便使用系统。 我们通过SQL事件探查器注意到,有时过程可能需要比正常情况多几个数量级的时间才能返回。我们想知道采取行动的最佳原因,以便收集信息来确定什么是阻塞/争用。一个很好的例子是一个存储过程,如果我在query analyser中手动运行它,它需要222毫秒来运行

  • 我使用。NET Core2.0和ASP.NET Core2.0进行应用程序开发。“测试”应用程序是一个。NET核心控制台应用程序。我正在编写的核心代码是一个类库。一旦适当的测试。我选择这样做是因为我暂时不会使用它(它正在替换旧的ASPNET代码)。 无论如何,由于我必须处理各种服务的大量API密钥,所以我决定使用Microsoft Azure Key Vault来存储密钥。我有这一切设置,并理解这

  • 对于我的应用程序,我有一个服务器端数据库,在其中存储用户及其数据。我想知道如何跟踪哪个用户拥有哪个UUID。我想确保只有具有自己唯一UUID的同一用户才能访问数据库中的数据。 最好的方法是什么?

  • web应用允许使用浏览器提供的API实现将数据存储在用户电脑上。这种客户端存储相当于赋予了web浏览器记忆功能。比方说,web应用就可以用这些方式来“记住”用户的偏好甚至是用户的所有状态信息,以便准确地“回忆”起用户上一次访问的位置。客户端存储遵循“同源策略”,因此不同站点的页面是无法读取对于存储的数据。而同一站点的不同的页面之间是可以互相共享存储数据的,它为我们提供了一种通信机制,例如一个表单的