Oracle ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误

Oracle ORA-06502:PL/SQL:数字或值错误:字符到数字转换错误,oracle,mybatis,Oracle,Mybatis,有没有办法在mybatis结果映射中指定一个字符串最多应包含20个字符?或者如何设置精度,比如数字4,2 例如,我有一个如下所示的结果图: <resultMap id="IMap" type="com.optsol.beans.Item"> <result property="item_id" column="ITEM_ID" jdbcType="INTEGER" /> <result property="item_desc" column="IT

有没有办法在mybatis结果映射中指定一个字符串最多应包含20个字符?或者如何设置精度,比如数字4,2

例如,我有一个如下所示的结果图:

<resultMap id="IMap" type="com.optsol.beans.Item">

    <result property="item_id" column="ITEM_ID" jdbcType="INTEGER" />
    <result property="item_desc" column="ITEM_DESC" jdbcType="VARCHAR" />
    <result property="min_qty" column="MIN_QTY" jdbcType="INTEGER" />
    <result property="max_qty" column="MAX_QTY" jdbcType="INTEGER" />
    <result property="abc" column="ABC" jdbcType="VARCHAR" />
    <result property="item_weight" column="ITEM_WEIGHT" jdbcType="DOUBLE" />
    <result property="size_cl" column="SIZE_CL" jdbcType="INTEGER" />
    <result property="weight_class" column="WEIGHT_CLASS" jdbcType="INTEGER" />
    <result property="exp_period" column="EXP_PERIOD" jdbcType="DOUBLE" />
    <result property="code" column="CODE" jdbcType="VARCHAR" />
    <result property="um" column="UM" jdbcType="VARCHAR" />
    <result property="img" column="IMG" jdbcType="VARCHAR" />
    <result property="conv_factor" column="CONV_FACTOR" jdbcType="DOUBLE" />
    <result property="vol" column="VOL" jdbcType="INTEGER" />
    <result property="info" column="INFO" jdbcType="VARCHAR" />
    <result property="statist_report" column="STATIST_PERIOD"
        jdbcType="INTEGER" />
    <result property="pack_parent" column="PACK_PARENT" jdbcType="INTEGER" />
    <result property="group_parent" column="GROUP_PARENT" jdbcType="INTEGER" />
    <result property="order_full" column="ORDER_FULL" jdbcType="INTEGER" />
    <result property="insDate" column="INSDATE" />
    <result property="updDate" column="UPDDATE" />
    <result property="insUser" column="INSUSER" jdbcType="VARCHAR" />
    <result property="updUser" column="UPDUSER" jdbcType="VARCHAR" />
</resultMap>
编辑1:每当我试图调用存储过程在此视图中添加新项时。。。我将得到以下错误:

org.apache.ibatis.exceptions.PersistenceException: 
### Error updating database.  Cause: java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 2
我创建了一个用于测试的类,该类尝试调用add方法:

 private ItemService iService = new ItemService(Item.class);
 @Test
  public void addProcTest() {
    Map<String, Object> paramMap = new HashMap<String, Object>();      
      paramMap.put("p_item_desc", "theo3");
      paramMap.put("p_min_qty", 1);
      paramMap.put("p_max_qty", 2);
      paramMap.put("p_abc", "A");
      paramMap.put("p_item_weight", 2);
      paramMap.put("p_size_cl", 1);
      paramMap.put("p_weight_class", 1);
      paramMap.put("p_exp_period", 2);
      paramMap.put("p_code", "theo");
      paramMap.put("p_um", "MP");
      paramMap.put("p_conv_factor",2.0);
      paramMap.put("p_vol", 2);
      paramMap.put("p_info", "theo2");
      paramMap.put("p_pack_parent", 105249);
      paramMap.put("p_group_parent", 0);
      paramMap.put("p_order_full", 0);
      paramMap.put("p_statist_period", 0);      
      paramMap.put("p_do_it", 1);
      iService.addItem(paramMap);
  }

您的问题是,您的过程有更多的参数,然后在MyBatis调用时传递给它,因此在缺少参数后的任何时候,您都应该有ORA-06502:PL/SQL:numeric或value错误,因为以下参数在传递它的顺序上的类型不同

您的程序包括:

(...)
p_EXP_PERIOD        item.EXP_PERIOD%type,
p_CODE              item.CODE%type,
p_UM                item_pack.UM%type,
p_IMG               item_pack.IMG%type,
p_CONV_FACTOR       item_pack.CONV_FACTOR%type,
p_VOL               item_pack.VOL%type,
(...)
在MyBatis的通话中,您正在做:

(...)
#{p_exp_period,jdbcType=DOUBLE},
#{p_code,jdbcType=VARCHAR},
#{p_um,jdbcType=VARCHAR},
#{p_conv_factor,jdbcType=DOUBLE},
#{p_vol,jdbcType=INTEGER},
#{p_info,jdbcType=VARCHAR},
(...)

因此,在p_IMG item_pack.IMG%type之后,如果您没有传递任何未命中类型,则会导致错误。

您的问题是,您的过程有更多的参数,然后在MyBatis调用时传递给它,因此,在缺少参数之后的任何时候,您都应该有ORA-06502:PL/SQL:numeric或value错误,因为以下参数在您传递它的顺序上的类型不同

您的程序包括:

(...)
p_EXP_PERIOD        item.EXP_PERIOD%type,
p_CODE              item.CODE%type,
p_UM                item_pack.UM%type,
p_IMG               item_pack.IMG%type,
p_CONV_FACTOR       item_pack.CONV_FACTOR%type,
p_VOL               item_pack.VOL%type,
(...)
在MyBatis的通话中,您正在做:

(...)
#{p_exp_period,jdbcType=DOUBLE},
#{p_code,jdbcType=VARCHAR},
#{p_um,jdbcType=VARCHAR},
#{p_conv_factor,jdbcType=DOUBLE},
#{p_vol,jdbcType=INTEGER},
#{p_info,jdbcType=VARCHAR},
(...)

因此,在p_IMG item_pack.IMG%type之后,如果您没有传递任何未传递的类型,则会导致错误。

能否发布一些代码以及预期结果,以便更容易回答您的问题。这个整数4,2没有任何意义,因为它是一个整数,您应该将其更改为双精度。你想要这个限制的字段是什么?另外,在你的问题中添加oracle标记。另外,你能发布你所说的调用过程的代码吗?@JorgeCampos我刚刚做了另一次编辑。现在,由于您的错误是ORA-06502:PL/SQL:numeric或value error,您应该发布您的过程定义。因为您传递的参数不等于过程参数的数据类型。您可以发布一些代码和预期结果,以便更容易回答您的问题。这个整数4,2没有任何意义,因为它是一个整数,您应该将其更改为双精度。你想要这个限制的字段是什么?另外,在你的问题中添加oracle标记。另外,你能发布你所说的调用过程的代码吗?@JorgeCampos我刚刚做了另一次编辑。现在,由于您的错误是ORA-06502:PL/SQL:numeric或value error,您应该发布您的过程定义。因为你传递的参数不等于过程参数的数据类型。非常感谢,你是个救命恩人!非常感谢你,你是个救生员!
(...)
#{p_exp_period,jdbcType=DOUBLE},
#{p_code,jdbcType=VARCHAR},
#{p_um,jdbcType=VARCHAR},
#{p_conv_factor,jdbcType=DOUBLE},
#{p_vol,jdbcType=INTEGER},
#{p_info,jdbcType=VARCHAR},
(...)