[英]Why IN OUT parameter returning value without registering for callable statement?
我正在使用包含兩個IN參數和一個IN OUT參數的CallableStatement從Java調用pk_adduser.pr_checkuser()。 我尚未使用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'。
我認為傳遞參數值的長度是問題。 但是我的問題是它如何表現呢?
在這里進行大膽的猜測,但是請嘗試以下操作:
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值從未使用過。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.