如何使用Oracle存儲過程的一個簡單例子

 轉載或別的時候,請拷貝 http://esc3721.blog.51cto.com/2366253/517800

關於Oracle存儲過程的介紹,我就不多囉嗦了。

建立存儲過程

  1. CREATE OR REPLACE PROCEDURE test_pro3(x OUT INT,y OUT int
  2. IS 
  3.   BEGIN 
  4.     x := 20; 
  5.     y := 30; 
  6.   END;

查詢存儲過程:

  1. SQL> SELECT text FROM all_source WHERE TYPE = 'PROCEDURE' AND name = 'TEST_PRO3'
  2.  
  3. TEXT 
  4. -------------------------------------------------------------------------------- 
  5. PROCEDURE test_pro3(x OUT INT,y OUT int
  6. IS 
  7.   BEGIN 
  8.     x := 20; 
  9.     y := 30; 
  10.   END
  11.  
  12. 已選擇6行。 

JAVA調用存儲過程的code:

  1. package votory; 
  2.  
  3. import java.sql.Connection; 
  4. import java.sql.DriverManager; 
  5.  
  6. import java.sql.*; 
  7. import java.sql.ResultSet; 
  8.  
  9. public class ConneDB { 
  10.     public ConneDB() { 
  11.     } 
  12.  
  13.     public static void main(String[] args) { 
  14.         String driver = "oracle.jdbc.driver.OracleDriver"
  15.         String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:SID"
  16.         Statement stmt = null
  17.         ResultSet rs = null
  18.         Connection conn = null
  19.         CallableStatement cstmt = null
  20.  
  21.         try { 
  22.             Class.forName(driver); 
  23.             conn = DriverManager.getConnection(strUrl, "scott""tiger"); 
  24.             CallableStatement proc = null
  25.              
  26.             proc = conn.prepareCall("{ call test_pro3(?,?)}"); 
  27.             proc.registerOutParameter(1, Types.INTEGER); 
  28.             proc.registerOutParameter(2, Types.INTEGER); 
  29.             proc.execute(); 
  30.              
  31.             String test = proc.getString(1); 
  32.             String test2 = proc.getString(2); 
  33.              
  34.             System.out.println(test + " " + test2); 
  35.             System.out.println("DONE.............."); 
  36.         } catch (SQLException ex2) { 
  37.             ex2.printStackTrace(); 
  38.         } catch (Exception ex2) { 
  39.             ex2.printStackTrace(); 
  40.         } finally { 
  41.             try { 
  42.                 if (rs != null) { 
  43.                     rs.close(); 
  44.                     if (stmt != null) { 
  45.                         stmt.close(); 
  46.                     } 
  47.                     if (conn != null) { 
  48.                         conn.close(); 
  49.                     } 
  50.                 } 
  51.             } catch (SQLException ex1) { 
  52.             } 
  53.         } 
  54.     } 

結果如下:

  1. 20 30 
  2. DONE.............. 

如何定義和處理一個遊標呢:

  1. CREATE OR REPLACE PACKAGE testpackage  
  2. IS 
  3.   TYPE test_cursor IS REF CURSOR
  4. END
  5.  
  6. CREATE OR REPLACE PROCEDURE test_pro4(p_cursor OUT testpackage.test_cursor) 
  7. IS 
  8.   BEGIN 
  9.     OPEN p_cursor FOR SELECT * FROM a; 
  10.   END

總算是搞明白一個簡單例子。。。。。呵呵

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章