我发Function只贴出部分代码:FUNCTION NEWVIPUSER(                      
                      P_G_S                   NUMBER, --购买或升级会员标识:0、购买;1升级;2续费
                      P_V_T_ID              BOSS_VIP_USER_TYPE.V_T_ID%TYPE, --升级或购买会员类型
                      P_V_CUSTOMNO  BOSS_VIP_USER.V_CUSTOMNO%TYPE, --ec编号
                      P_PRODUCTNO    BOSS_VIP_USER_TYPE.V_PRODUCTNO%TYPE, --产品编号
                      P_V_USERNAME   BOSS_VIP_USER.V_USERNAME%TYPE, --创建人 格式为: 52+手机号码
                      P_V_DATE_B        BOSS_VIP_USER.V_DATE_B%TYPE, --会员开始时间:格式必须为 YYYY-MM-DD
                      P_M_NUMBER       NUMBER, --购买月数
                      P_V_STATUS        BOSS_VIP_USER.V_STATUS%TYPE, --状态:0、正常;1、过期。
                      P_V_REMARK       BOSS_VIP_USER.V_REMARK%TYPE --备注
                      ) RETURN VARCHAR2 IS
V_ID_NEW   NUMBER; --会员编号(新)
V_ID_NEW2  NUMBER; --会员编号(新2)
V_ID_OLD   NUMBER; --原会员编号    
V_RETURN_STRING VARCHAR2(300); --返回的字符串编号:按"@"符号分割
BEGIN    
V_RETURN_STRING := V_ID_NEW || '@' || V_ID_OLD || '@' ||V_ID_NEW2;    
RETURN V_RETURN_STRING;  
EXCEPTION    
WHEN OTHERS THEN      
DBMS_OUTPUT.PUT_LINE(sqlcode || ':' || sqlerrm);      
ROLLBACK;      
RETURN - 1;
END NEWVIPUSER;
在PLSQL中测试、返回不没有什么问题的!但是、我在java程序中调用它的时候、却给我报错了!
调用部分关键代码:
if( !call.execute() )
{
      rval = call.getString( 1 ) ;
}

执行:call.execute()
抛出异常:java.sql.SQLException: ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 1
求指点啊characterexception

解决方案 »

  1.   

    更诡异的是、我这个方法不是购买或升级会员咯
    当我选择的是0、购买的时候、它又没有错误了!
    购买的时候:V_RETURN_STRING := V_ID_NEW;
    也就是只返回V_ID_NEW!也就是系统生成的编号!
    编号是number的、搞不懂为什么在加上'@'过后就出错了!
    我返回的是varchar2啊、又不是number!!!
      

  2.   

    你打印一下你传的参数,应该是有些number类型的参数传值不对
      

  3.   

    介个系我传入的参数:购买:[0, 1, BX201209100000003176, PR201102240000000167, 5213622220000, 2013-03-20, 3, 0, ]
    升级:[1, 2, BX201209100000003176, PR201102240000000167, 5213622220000, 2013-04-20, 1, 0, ]
    第一个参数列表的参数传入木有问题返回是成功的,购买的时候:V_RETURN_STRING := V_ID_NEW;然后就return第二个参数列表的参数传入就出问题了!
    return V_RETURN_STRING := V_ID_NEW || '@' || V_ID_OLD || '@' ||V_ID_NEW2; 
    异常信息:ORA-06502: PL/SQL: numeric or value error: character to number conversion error
      

  4.   

    把你java调用存储过程的代码都贴出来
      

  5.   

    郁闷了半天啊~~~原来是PACKAGE里面定义的Function不能返回varchar2的值、这是为什么呢?
    包:
    CREATE OR REPLACE PACKAGE VIP_USER IS
    FUNCTION NEWVIPUSER(....) RETURN VARCHAR2;
    END VIP_USER;
    主体:
    CREATE OR REPLACE PACKAGE BODY VIP_USER IS
      --注册会员(购买、升级、续费)
      FUNCTION NEWVIPUSER(...) RETURN VARCHAR2 IS
       V_RETURN_STRING VARCHAR2(300); --返回的字符串编号:按"@"符号分割
      BEGIN
        V_ID_NEW := 1;
        V_ID_NEW2 := 2;
        V_ID_OLD := 3;
        --V_RETURN_STRING := '天杀的' ;
        V_RETURN_STRING := 1 ;
        RETURN V_RETURN_STRING;
      EXCEPTION
        WHEN OTHERS THEN
          DBMS_OUTPUT.PUT_LINE(sqlcode || ':' || sqlerrm);
          ROLLBACK;
          RETURN - 1;
      END NEWVIPUSER;
    END VIP_USER;当V_RETURN_STRING := '天杀的'的时候就会出错
    ORA-06502: PL/SQL: numeric or value error: character to number conversion error
    而当V_RETURN_STRING := 1的时候就没有问题!
    这是为什么呢?难道不能返回varcahr2???
    求解!
      

  6.   

    http://www.myexception.cn/eclipse/14353.html
    其内容是:
    ------解决方案--------------------------------------------------------
    ResultSet rs; 
    if(rs.next())rs.getString(0);
    你试试看吧
      

  7.   

    终于知道问题的所在了!!!
    不关Function的问题!
    关键错误在一个获取返回值的地方上:原来获取的时候因为想着是String类型就用rval = call.getString( 1 ) ;这个方法来获取、但是打死也想不到这样获取是错误的!要这样获取才能正确:str = String.valueOf( call.getObject( 1 ) ) ;.....................