java 메모리 프로세스 호출 (output과return)

MAIN 메서드
package callProcedure;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import oracle.jdbc.OracleTypes;
//       
public class CallProcedure {
public static Connection con = null;
//       ,        
public static CallableStatement callableStatement = null;
public static ResultSet rs = null;
public static void main(String args[]) throws SQLException {
   System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>      <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
   //            
   callNoReturnValueProcedure();
   //           
   callParamProcedure();
   //               
   callOnlyOneReturnValueProcedure();
   //              
   callReturnValuesProcedure();
   System.out.println(">>>>>>>>>>>>>>>>>><<>>>>>>>>>>>    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
   //            
   callReturnValueFunction();
}


반환 값이 없는 저장 프로세스를 호출합니다
public static void callNoReturnValueProcedure() throws SQLException {
   try {
    con = getConnection();
    callableStatement = con.prepareCall("{call noReturnValueProcedure}");
    callableStatement.execute();
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
   System.out.println("callNoReturnValueProcedure()            !");
}

위의 callNoReturnValueProcedure()에서 호출된 스토리지 프로세스는 다음과 같습니다.
   create or replace procedure noReturnValueProcedure is --                ,    testProcedure()   
   begin
    insert into cht.remarke_info
    values
      ('001',
       '001',
       to_char(sysdate, 'yyyymmdd'),
       to_char(sysdate, 'yyyymm'),
       'cht',
       '      。',
       sysdate,
       100);
   end noReturnValueProcedure;

파라미터가 있는 저장 프로세스를 호출합니다
public static void callParamProcedure() throws SQLException {
   try {
    con = getConnection();
//    //    
//    callableStatement = con.prepareCall("{call paramProcedure('bonc-cht', 2001)}");
   
    //    
    callableStatement = con.prepareCall("{call paramProcedure(?, ?)}");
    callableStatement.setString(1, "bonc-cht");
    callableStatement.setInt(2, 3001);
   
    callableStatement.execute();
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
   System.out.println("callParamProcedure()           !");
}

위의 callParamProcedure()에서 호출된 저장 프로세스는 다음과 같습니다.
  create or replace procedure paramProcedure(userID varchar2, ramark_info_id number) is
    user_id varchar2(200); --                  ,    ( :user_id varchar2  ),  number     , :v_id_no number;
   begin
    user_id := userID; --     ,   userid = userID    ,     ::=
    insert into cht.remarke_info
    values
      ('002',
       '002',
       to_char(sysdate, 'yyyymmdd'),
       to_char(sysdate, 'yyyymm'),
       user_id, --     
       '      。',
       sysdate,
       ramark_info_id); --       
   end paramProcedure;

되돌아오는 값이 하나밖에 없는 저장 프로세스를 호출합니다
public static void callOnlyOneReturnValueProcedure() throws SQLException {
   try {
    con = getConnection();
    callableStatement = con.prepareCall("{call cht.onlyOneReturnValueProcedure(?, ?)}");
    callableStatement.setString(1, "fdasfdsa");
    //         2       
    callableStatement.registerOutParameter(2, Types.INTEGER);
    callableStatement.execute();
    //      (  )
    //   :callableStatement.getString(2)    2     ,         out    ,
    //   out       ,   callableStatement.getString(1),
    //         ,  callableStatement.getString(3)。
    //              ,        out   。
    int label_inst_id = callableStatement.getInt(2); //   :getInt(2)    getInt("2")
    System.out.println("callOnlyOneReturnValueProcedure()                (   ):" + label_inst_id);
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
}

위의 callOnlyOneReturnValueProcedure () 호출된 저장 프로세스는 다음과 같습니다.
설명: 저장 프로세스는 output 매개 변수를 통해서만 결과를 되돌릴 수 있습니다. 저장 프로세스가 이 출력 매개 변수에 값을 부여했다면 되돌릴 수 있습니다. 이런 되돌림 방식은 여러 개의 값을 되돌릴 수 있고return 되돌림 값은 함수function에만 적용됩니다.
   create or replace procedure onlyOneReturnValueProcedure(user_ID in varchar2, max_label_inst_id out number) is
    begin
    select max(t.remarke_info_id)
       into max_label_inst_id  ---   ,        
       from cht.remarke_info t
      where t.user_id = user_ID;
    end onlyOneReturnValueProcedure;

반환 값이 있는 저장 프로세스를 호출합니다
public static void callReturnValuesProcedure() throws SQLException {
   try {
    con = getConnection();
    callableStatement = con.prepareCall("{call getRemarke_info(?, ?)}");
    callableStatement.setString(1, "cht");
    //          
    callableStatement.registerOutParameter(2, OracleTypes.CURSOR);
    callableStatement.execute();
    //          
    rs = (ResultSet)callableStatement.getObject(2);
    int i = 0;
    while (rs.next()) {
     System.out.println(rs.getString(1) + "\t" + 
       rs.getString(2) + "\t" + 
       rs.getString(3) + "\t" + 
       rs.getString(4) + "\t" + 
       rs.getString(5) + "\t" + 
       rs.getString(6) + "\t" + 
       rs.getString(7) + "\t" + 
       rs.getString(8));
     i ++;
    }
    System.out.println("             callReturnValuesProcedure()    , " + i + "   !");
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
}

위의 callReturnValuesProcedure ()에서 호출된 패키지와 저장 프로세스 (프로세스는 결과 집합을 되돌려주고 패키지와 커서를 사용합니다) 는 다음과 같습니다.
   create or replace package myPackage as    ---as is    
     type cur is ref cursor; ---    
     procedure getRemarke_info(userId in varchar2, outputValue out cur);   ---  ,            ,  
    end myPackage;
       :
    create or replace procedure getRemarke_info(userId in varchar2, outputValue out myPackage.cur) is    ---as is    
    begin
     open outputValue for ---    ,    
       select * from cht.remarke_info t where t.user_id = userId;
    end getRemarke_info;

반환 값이 있는 함수를 호출합니다
public static void callReturnValueFunction() throws SQLException {
   try {
    con = getConnection();
    callableStatement = con.prepareCall("{? = call returnValuFunction(?)}"); //          ,       :returnValuFunction,      , :returnValuFunction()
    callableStatement.registerOutParameter(1, Types.VARCHAR);
    callableStatement.setString(2, "cht");
    callableStatement.execute();
   
    //        getString(1)       (   )
    String output = callableStatement.getString(1);
    System.out.println("callReturnValueFunction()             !    :" + output);
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
}

위의 callReturnValueFunction()에서 호출된 함수는 다음과 같습니다.
  create or replace function returnValuFunction(param varchar2) return varchar2 is ---return varchar2(varchar, number...);         ,       :returnValuFunction,      , :returnValuFunction()
    return_value varchar2(20);   ---              
   begin
    select count(*)
      into return_value
    from 
      cht.remarke_info t
    where t.user_id = param;
    return return_value;
   end returnValuFunction;

이 파일에 사용된 테이블의 테이블 구조는 다음과 같습니다.
CREATE TABLE "CHT"."REMARKE_INFO" 
   ( "LABEL_INST_ID" VARCHAR2(200), 
"DATE_TYPE" VARCHAR2(5), 
"DAY_ID" VARCHAR2(8), 
"MONTH_ID" VARCHAR2(6), 
"USER_ID" VARCHAR2(20), 
"REMARKE_CONTENT" VARCHAR2(500), 
"REMARKE_DATE" DATE, 
"REMARKE_INFO_ID" NUMBER
   )

좋은 웹페이지 즐겨찾기