我正在使用CallableStatement从Java调用pk_adduser.pr_checkuser(),其中包含两个IN参数和一个IN OUT参数。我尚未使用CallableStatement.registerOutParameter(int parameterIndex,int sqlType)注册IN OUT参数。 但是,如果返回值的长度与输入值的长度相同,我仍然能够使用IN OUT参数获得输出值,否则我会遇到SQL异常,例如ORA-06502:PL / SQL:数字或值错误。
我正在使用Java 1.7和Oracle 12c。
我的包裹如下: 我已经使用了p_user_login_id参数,但是没有包含在给定的代码中,只是给定的一段代码。
create or replace PACKAGE BODY pk_adduser
AS
PROCEDURE pr_checkuser (
p_first_name IN VARCHAR,
p_last_name IN VARCHAR,
p_user_login_id IN OUT VARCHAR);
/
PROCEDURE pr_checkuser (
p_first_name IN VARCHAR,
p_last_name IN VARCHAR,
p_user_login_id IN OUT VARCHAR)
IS
BEGIN
SELECT user_login_id
INTO p_user_login_id
FROM user_account
WHERE first_name = p_first_name
AND last_name = p_last_name;
END pr_checkuser;
END;
我的Java代码如下:
String getcall = "{call pk_adduser.pr_checkuser (?,?,?)}";
CallableStatement callsts = connect.prepareCall(getcall);
callsts.setString(1, "Ramesh");
callsts.setString(2, "Nuvvula");
callsts.setString(3, "RamN");
callsts.execute();
String user_id = callsts.getString(3);
System.out.println("user_id: "+user_id);
p_user_login_id ='RamN',我将传递给IN OUT参数,选择查询返回“ RameshN”,该值在数据库中可用,并尝试分配给p_user_login_id。
如果我通过p_user_login_id ='RamN123',则成功返回'RameshN'。
我认为传递参数值的长度是问题。但是我的问题是它怎么会这样呢?
答案 0 :(得分:0)
在这里进行疯狂的猜测,但是尝试一下:
String result = "RamN";
String getcall = "{call pk_adduser.pr_checkuser (?,?,?)}";
CallableStatement callsts = connect.prepareCall(getcall);
callsts.setString(1, "Ramesh");
callsts.setString(2, "Nuvvula");
callsts.setString(3, result);
callsts.execute();
String user_id = callsts.getString(3);
但是,不能使用pl / sql代码传入一个in / out参数,而该参数的in值从未使用过。