簡體   English   中英

為什么在不注冊可調用語句的情況下IN OUT參數返回值?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM