<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ice world

    There is nothing too difficult if you put your heart into it.
    posts - 104, comments - 103, trackbacks - 0, articles - 0
     一:無返回值的存儲過程調用

    存儲過程:

    CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2, PARA2 IN VARCHAR2) AS  
      
    BEGIN          
        INSERT INTO DBO.EMP (ID,NAME) VALUES(PARA1, PARA2);   
    END PRO_1; 

    Java代碼:

    import java.sql.*;
    import java.sql.ResultSet;

    public class CallProcedureTest1 {
        
    public CallProcedureTest1() {
            
    super();
        }


        
    public static void main(String[] args) {
            String driver 
    = "oracle.jdbc.driver.OracleDriver";
            String url 
    = "jdbc:oracle:thin:@127.0.0.1:1521:orcl ";
            String user 
    = "admin";
            String pwd 
    = "password";
            Connection conn 
    = null;
            CallableStatement cs 
    = null;
            ResultSet rs 
    = null;
            
    try {
                Class.forName(driver);
                conn 
    = DriverManager.getConnection(url, user, pwd);
                cs 
    = conn.prepareCall("{ call DBO.PRO_1(?,?) }");
                cs.setString(
    1"10");
                cs.setString(
    2"Peter");
                cs.execute();
            }
     catch (SQLException e) {
                e.printStackTrace();
            }
     catch (Exception e) {
                e.printStackTrace();
            }
     finally {
                
    try {
                    
    if (rs != null{
                        rs.close();
                    }

                    
    if (cs != null{
                        cs.close();
                    }

                    
    if (conn != null{
                        conn.close();
                    }

                }
     catch (SQLException e) {
                }

            }

        }

    }

    備注,存儲過程PRO_1中用到了表EMP(ID, NAME),需事先建好

     

    二:有返回值的存儲過程(非結果集)   

    存儲過程:

    CREATE OR REPLACE PROCEDURE PRO_2(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS   
      
    BEGIN        
           
    SELECT INTO PARA2 FROM EMP WHERE ID= PARA1;    
      
    END PRO_2; 

     

    Java代碼:

    import java.sql.*;

    public class CallProcedureTest2 {
        
    public CallProcedureTest2() {
            
    super();
        }


        
    public static void main(String[] args) {
            String driver 
    = "oracle.jdbc.driver.OracleDriver";
            String url 
    = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
            String user 
    = "admin";
            String pwd 
    = "password";
            Connection conn 
    = null;
            CallableStatement cs 
    = null;
            ResultSet rs 
    = null;
            
    try {
                Class.forName(driver);
                conn 
    = DriverManager.getConnection(url, user, pwd);
                cs 
    = conn.prepareCall("{ call DBO.PRO_2(?,?) }");
                cs.setString(
    1"10");
                cs.registerOutParameter(
    2, Types.VARCHAR);
                cs.execute();
                String name 
    = cs.getString(2);
                System.out.println(
    "name: " + name);
            }
     catch (SQLException e) {
                e.printStackTrace();
            }
     catch (Exception e) {
                e.printStackTrace();
            }
     finally {
                
    try {
                    
    if (rs != null{
                        rs.close();
                    }

                    
    if (cs != null{
                        cs.close();
                    }

                    
    if (conn != null{
                        conn.close();
                    }

                }
     catch (SQLException e) {
                }

            }

        }

    }

     

    注意:cs.getString(2)中的數值2并非任意的,而是和存儲過程中的out列對應的,如果out是在第一個位置,那就是proc.getString(1),如果是第三個位置,就是proc.getString(3),當然也可以同時有多個返回值,那就是再多加幾個out參數了。   

     

    三:返回列表     

    由于oracle存儲過程沒有返回值,它的所有返回值都是通過out參數來替代的,列表同樣也不例外,但由于是集合,所以不能用一般的參數,必須要用pagkage了.所以要分兩部分,   

     

    1. 建一個程序包。如下:

    CREATE OR REPLACE PACKAGE MYPACKAGE AS TYPE MY_CURSOR IS REF CURSOR;   END MYPACKAGE;

     

    2. 建立存儲過程,如下:

    CREATE OR REPLACE PROCEDURE PRO_3(p_CURSOR out MYPACKAGE.MY_CURSOR) AS   
      
    BEGIN          
           
    OPEN p_CURSOR FOR SELECT * FROM DBO.EMP;   
      
    END PRO_3; 


    可以看到,它是把游標(可以理解為一個指針),作為一個out 參數來返回值的。   

      

    Java代碼:

    import java.sql.*;
    import java.sql.ResultSet;

    public class CallProcedureTest2 {
        
    public CallProcedureTest2() {
            
    super();
        }


        
    public static void main(String[] args) {
            String driver 
    = "oracle.jdbc.driver.OracleDriver";
            String url 
    = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
            String user 
    = "admin";
            String pwd 
    = "password";
            Connection conn 
    = null;
            CallableStatement cs 
    = null;
            ResultSet rs 
    = null;
            
    try {
                Class.forName(driver);
                conn 
    = DriverManager.getConnection(url, user, pwd);
                cs 
    = conn.prepareCall("{ call DBO.PRO_3(?) }");
                cs.registerOutParameter(
    1, oracle.jdbc.OracleTypes.CURSOR);
                cs.execute();
                rs 
    = (ResultSet) cs.getObject(1);
                
    while (rs.next()) {
                    System.out.println(
    "\t" + rs.getString(1+ "\t"
                            
    + rs.getString(2+ "\t");
                }

            }
     catch (SQLException e) {
                e.printStackTrace();
            }
     catch (Exception e) {
                e.printStackTrace();
            }
     finally {
                
    try {
                    
    if (rs != null{
                        rs.close();
                        
    if (cs != null{
                            cs.close();
                        }

                        
    if (conn != null{
                            conn.close();
                        }

                    }

                }
     catch (SQLException e) {
                }

            }

        }

    }

    注意:在執行前一定要先把oracle的驅動包放到class路徑里,否則會報錯。


     

    主站蜘蛛池模板: 亚洲精品和日本精品| 亚洲国产精品无码久久久不卡| a级毛片免费观看视频| 亚洲嫩草影院在线观看| 国产又大又粗又硬又长免费| 亚洲人成网站观看在线播放| 国产亚洲AV手机在线观看| 国产精品久久久久久久久久免费 | 毛片高清视频在线看免费观看| 亚洲人成电影在线观看青青| 亚洲精品456人成在线| 暖暖在线日本免费中文| 亚洲最大在线视频| 色九月亚洲综合网| 亚洲国产精品无码久久青草 | 亚洲精品久久久www | 亚洲国产精品无码久久SM| 亚洲国产成人私人影院| 午夜视频免费在线观看| 国产成人aaa在线视频免费观看| 日韩精品无码专区免费播放| 成年在线观看网站免费| 国产日韩AV免费无码一区二区| 91精品国产免费网站| 亚洲a级在线观看| 一级A毛片免费观看久久精品| 亚洲最大的成人网站| 亚洲AV无码国产精品麻豆天美| 国产一区二区免费在线| 日韩欧美亚洲中文乱码| 午夜免费啪视频在线观看 | 91在线视频免费播放| 国产人成亚洲第一网站在线播放| 亚洲av无码片在线播放| 亚洲小说图区综合在线| 日本一区二区三区在线视频观看免费 | 亚洲人成在线观看| 亚洲理论在线观看| 国产精品亚洲专区无码WEB| eeuss影院www天堂免费| 精品国产sm捆绑最大网免费站|