Я вызываю pk_adduser.pr_checkuser () из Java, используя CallableStatement, который содержит два параметра IN и один параметр IN OUT. Я не зарегистрировал параметр IN OUT, используя CallableStatement.registerOutParameter (int параметрIndex, int sqlType).
Но все же я могу получить выходное значение с помощью параметра 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'.
Я думаю, что Передача значения параметра является проблемой. Но мой вопрос, как это может вести себя так?