我发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
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
当我选择的是0、购买的时候、它又没有错误了!
购买的时候:V_RETURN_STRING := V_ID_NEW;
也就是只返回V_ID_NEW!也就是系统生成的编号!
编号是number的、搞不懂为什么在加上'@'过后就出错了!
我返回的是varchar2啊、又不是number!!!
升级:[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
包:
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???
求解!
其内容是:
------解决方案--------------------------------------------------------
ResultSet rs;
if(rs.next())rs.getString(0);
你试试看吧
不关Function的问题!
关键错误在一个获取返回值的地方上:原来获取的时候因为想着是String类型就用rval = call.getString( 1 ) ;这个方法来获取、但是打死也想不到这样获取是错误的!要这样获取才能正确:str = String.valueOf( call.getObject( 1 ) ) ;.....................