java为什么IN-OUT参数返回值而不注册callable语句?
我正在调用pk_adduser。pr_checkuser()来自java,使用CallableStatement,其中包含两个IN参数和一个IN-OUT参数。我没有使用CallableStatement注册IN-OUT参数。registerOutParameter(int-parameterIndex,int-sqlType)。 但是,如果返回值的长度与输入值的长度相同,我仍然能够使用IN-OUT参数获取输出值,否则我将得到类似于ORA-06502:PL/SQL:numeric或value error的SQL异常
我正在使用Java1.7和Oracle12c
我的包裹如下: 我使用了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\u login\u id='RamN'我正在传递输入输出参数,选择查询返回“RameshN”,该参数在数据库中可用,并尝试分配给p_user\u login\u id
如果我通过p_user_login_id='RamN123'成功返回'RameshN'
我认为传递参数值的长度是个问题。但我的问题是它怎么会这样
# 1 楼答案
在这里做一个疯狂的猜测,但是试试这个:
但是,pl/sql代码没有意义传入其in值从未使用过的in/out参数