오라클 응용 프로그램은 저장 함수를 호출

패키지 com.founder.ec.common.lucene; 


수입 java.sql.CallableStatement의;
수입 java.sql.Connection의;
수입 java.sql.DriverManager의;
수입 의 java.sql.ResultSet; 


수입 oracle.jdbc.internal.OracleCallableStatement;
수입 oracle.jdbc.internal.OracleTypes; 

공공  클래스 ReadMysql { 

    공공  정적 연결의 getConnection ()이 발생 예외 { 
        문자열 URL ": 오라클 : JDBC를 얇은 :. 192.168 @"= ; 
        Class.forName을 ( "oracle.jdbc.driver.OracleDriver" ); 
        문자열의 userName = ""; 
        문자열 암호 = "" ; 
        연결 사기꾼 = DriverManager.getConnection를 (URL, 사용자 이름, 암호);
        반환 사기꾼; 
    } 

    / ** 
     * (번호에 MEMBERID VARCHAR2를 OUT realname, VARCHAR2를 OUT mobile_phone) 절차 member_procedure_out을 생성 
     * / 
// 释放数据库资源
    공공  정적  무효 릴리스 (연결 사기꾼, CallableStatement의 호출의 ResultSet 고해상도) {
         경우 (고해상도! = null의 | ! | 전화 = 널 (null) || 사기꾼! = null이 ) {
             시도 { 
                ) (res.close을;
                con.close (); 
                call.close (); 
            }  
         형 empcursor는 REF CURSOR이고;캐치 (예외 전자) { 
                e.printStackTrace (); 
            } 마지막 { 
                입술 = ; 
                전화 = 널 (null)을 ; 
                입술 = ; 
            } 

        } 
    } 

    공공  정적  무효 메인 (문자열 []에 args) { 

        / ** 
         * 
         AS myPackage에 패키지를 만들 
         PROCEDURE queryEmpList (NUMBER에 MEMBERID, empList 아웃 empcursor); 

         최종 myPackage에;

          * / 
        은 try {
             // 회원 아이디로 회원 이름을 얻기 위해 저장 프로 시저를 호출
              // TestPro ();
             // 연간 소득 회원 ID에 따라 저장 기능, 계산을 호출
             // TestFunction ();
             // 패킷, 커서의 저장 프로 시저를 호출 
            testcursor (); 
        } 캐치 (예외 E) { 
            ; e.printStackTrace () 
        } 마지막을 { 

            // , 릴리스 (CON가 null, 전화) 
        } 
    } 

    개인  정적  무효 testcursor () {
        연결 사기꾼 = 널 (null) ; 
        호출 된 CallableStatement = 널 (null)을;
        시도 { 
            문자열 SQL은 = "(?) {mypackage.queryEmpList를} 전화" ;  = 의 getConnection (); 
            호출 = con.prepareCall (SQL); 

            call.setInt ( 1,7923 ); 
            call.registerOutParameter ( 2 OracleTypes.CURSOR); // 光标

            call.execute (); 
           // 取出该会员的所有信息 
            ResultSet의 입술 = ((OracleCallableStatement) 호출) .getCursor (2 );
         동안 (res.next ()) { 
             문자열 이름 = res.getString ( "real_name" );
             INTMEMBERID = res.getInt ( "MEMBER_ID" ); 
             System.out.print (이름 + MEMBERID); 
         } 


        } 캐치 (예외 전자) { 
            e.getMessage (); 
        } 
    } 

    개인  정적  무효 testfunction () { 
        접속 콘 = 널을 ; 
        호출 된 CallableStatement = 널 (null)을 ;
        시도 { 


            문자열 SQL = "{? = query_member 전화 (?)}" ;  = 의 getConnection (); 
            전화 =con.prepareCall (SQL); 
            call.registerOutParameter ( 1 , OracleTypes.NUMBER); 
            call.setInt ( 2,7923 ); 
            call.execute (); 
             합 = call.getDouble (1 ); 
            에서 System.out.println (합); 

        } 캐치 (예외 전자) { 
            e.getMessage (); 
        } 

    } 

    개인  정적  무효 testpro () { 
        접속 콘 = 널을 ; 
        호출 된 CallableStatement 
            문자열 SQL= ;
        시도 {

 "(?)} {전화 member_procedure_out를"= ;  = 의 getConnection (); 
            호출 = con.prepareCall (SQL); 
            call.setInt ( 1, 7923 ); 
            call.registerOutParameter ( 2 , OracleTypes.VARCHAR); 
        } 캐치 (예외 전자) { 
            e.getMessage (); 
        } 
        시도 { 
            ) (call.execute을; 
            문자열 realName = call.getString (2 ); 
            에서 System.out.println (realName); 
        }캐치 (예외 전자) { 
            e.printStackTrace (); 


        } 

    } 
}
생성  PROCEDURE의 raise_order_price_procedure (ORDERID 에서  NUMBER )
   
  PSAL ORDER_INFO.paid_fee의 %의 유형; 

  BEGIN 

    선택 paid_fee를  PSAL 에서 ORDER_INFO 여기서 ORDER_ID = ORDERID; 

    업데이트 ORDER_INFO가 설정 paid_fee = paid_fee + 100  여기서 ORDER_ID = ORDERID; 

 DBMS_OUTPUT.PUT_LINE ( ' 涨前: ' || PSAL || ' 涨后: ' ||(PSAL + 100 ));
  END ; 

드롭   절차의 member_procedure_out을; 

  CREATE   PROCEDURE의 (MEMBERID을 member_procedure_out  NUMBER , OUT realname   VARCHAR2를 )
   AS 
    BEGIN 

      선택   m.REAL_NAME를  realname 에서 부재 m  m.MEMBER_ID = MEMBERID;
    END ;
/ 

-
 BEGIN 
  raise_order_price_procedure ( 102,467을 );
END ; 



  CREATE   FUNCTION을query_member (MEMBERID 에서  NUMBER )
     RETURN의  NUMBER 
    AS 

      PSAL member.account_fee의 %의 유형; 
      PCOMM의 member.sum_points %의 유형; 

    BEGIN 
선택   account_fee, sum_points INTO PSAL, PCOMM 에서 회원을 어디에 MEMBER_ID = MEMBERID;
      RETURN의 PSAL * 12 + NVL (PCOMM, 0 );
    END ; 



  드롭 패키지 myPackage에를; 


CREATE   패키지 myPackage에 AS 
  형을 empcursor이다 REF 커서는 ;
  PROCEDURE queryEmpList (MEMBERID 에서  NUMBER , empList empcursor OUT); 

  최종 myPackage에; 



생성  또는  교체   패키지의 myPackage에 BODY AS 
  PROCEDURE queryEmpList (MEMBERID 에서  NUMBER , empList 아웃을 empcursor) 
    BEGIN 
      OPEN empList을 위해  선택  *  에서 MEMBER   여기서 MEMBER_ID = MEMBERID;
    END queryEmpList;
  최종 myPackage에; 




 만들 패키지 emp_pkg을
 절차 emp_update_ename (v_empno VARCHAR2 , v_ename의 VARCHAR2는 );
 함수 emp_get_sal (v_empno VARCHAR2 ) 반환  번호 ;
 ; 






선택  *  에서   부재 여기서   MEMBER_ID = 7,923

 

추천

출처www.cnblogs.com/wangchuanfu/p/10963282.html