zoukankan      html  css  js  c++  java
  • 也谈Oracle异常: ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

    场景:

    .Net程序调用Oracle方法 command.ExecuteNonQuery()执行存储过程;弹出如标题异常信息。

    存储过程有4个输入参数,一个输出参数。一旦执行到给输出参数赋值的时候就报错。但在Plsql环境下调度,是正常的。

    分析:

    查阅各帖子,都说是变量长度不够,但设置也无果。

    后来,怀疑是不是设置参数顺序有问题,调整,搞定。

    解决:

    存储过程中定义的参数,第一个为out,虽然在设置参数时,用了参数名,但好像没起什么作用。所以,把输出参数第一个设置,与定义顺序一致,就OK了。

    另外:输出参数长度是必须指定的。这里,我是通过给定一个无意义的初始值(做占位符用)。

    //定义输出参数

    Dictionary<string, object> dicOut = new Dictionary<string, object>();
    dicOut.Add("djdh", "11111111111111111111");

    定义存储过程:

    CREATE OR REPLACE PROCEDURE gendh(djdh OUT VARCHAR2,
    djlx IN VARCHAR2,
    rq IN VARCHAR2,
    dwdm IN VARCHAR2,
    csfs IN VARCHAR2) IS……

    后台服务中的存储过程方法定义:

    // 设置输出参数
    foreach (KeyValuePair<string, object> kvp in dicParaOut)
    {
    command.Parameters.Add(kvp.Key, OracleDbType.Varchar2, kvp.Value.ToString().Length).Direction = ParameterDirection.Output;
    }

    //设置输入参数

    foreach (KeyValuePair<string, object> kvp in dicIn)
    {
    command.Parameters.Add(kvp.Key, OracleDbType.Varchar2, kvp.Value, ParameterDirection.Input);
    }

  • 相关阅读:
    如何使用VS2013进行单元测试和查看代码覆盖率
    荔枝架构演进历程读后感
    关于海尔电商峰值系统架构读后感
    苏宁易购:商品详情系统架构设计读后感
    第二阶段冲刺第四天
    第二阶段冲刺第五天
    第二阶段冲刺第三天
    第二阶段冲刺第二天
    第二阶段冲刺第一天
    第一阶段末尾
  • 原文地址:https://www.cnblogs.com/liuzhixian/p/4539207.html
Copyright © 2011-2022 走看看