程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 在sqlplus和JAVA中調用帶有IN-OUT參數的存儲過程

在sqlplus和JAVA中調用帶有IN-OUT參數的存儲過程

編輯:關於JAVA

一、 SQLPLUS

比如我的數據庫中有下面這樣一個存儲過程,我怎麼樣能調用這個存儲過程,並得到返回值呢?

CREATE OR REPLACE

PROCEDURE TEST_PROCEDURE1

  (

    PARAM1 IN VARCHAR2,

    PARAM2      IN OUT VARCHAR2,

    PARAM3      IN OUT NUMBER)

                IS

BEGIN

  PARAM2              := '88888';

  PARAM3              := '0';

END TEST_PROCEDURE1;

一般調用存儲過程或者函數會想到CALL或者EXECUTE,但是問題的關鍵是這個存儲過程具有IN-OUT參數,應該是不能使用上面兩個命令吧,

所以我想到就是自己寫個匿名PL/SQL塊來進行調用。代碼如下所示:

DECLARE

  PARAM1 VARCHAR2(10);

  PARAM2 VARCHAR2(10);

  PARAM3 NUMBER;

BEGIN

  PARAM1 := '810' ;

  PARAM2 := '1';

  PARAM3 :=1;

 TEST_PROCEDURE1(PARAM1 ,PARAM2 ,PARAM3 );

  DBMS_OUTPUT.PUT_LINE(PARAM2 );

  DBMS_OUTPUT.PUT_LINE(PARAM3 );

END;

PL/SQL新手,如果哪位有更好的方法請賜教。

二、使用JAVA調用

conn:  一般的JDBC連接,JAVA調用主要代碼如下

        CallableStatement call = conn.prepareCall("{call TEST_PROCEDURE1(? ,? ,?)}");

        call.setString(1, "810");//傳入參數1

        call.setString(2, "1");//傳入參數2(傳出參數1)

        call.setInt(3, 1);//傳入參數3(傳出參數2)

        call.registerOutParameter(2, java.sql.Types.VARCHAR);//傳出參數1

        call.registerOutParameter(3, java.sql.Types.NUMERIC);//傳出參數2

        call.execute();

        System.out.println(call.getString(2));

        System.out.println(call.getInt(3));
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved