<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路徑里,否則會報錯。


     

    主站蜘蛛池模板: 亚洲国产综合精品中文第一区| 亚洲人成网站看在线播放| h片在线免费观看| 亚洲av无码成人精品国产| 亚洲乱码中文字幕综合| 0588影视手机免费看片| 粉色视频免费入口| 亚洲精品电影天堂网| 亚洲av高清在线观看一区二区| 一级毛片免费不卡在线| 国产亚洲视频在线播放大全| 色噜噜综合亚洲av中文无码| 四虎永久免费影院在线| 日本免费一区二区三区| 免费国产黄网站在线看| 亚洲欧洲日产v特级毛片| 亚洲精品视频久久久| 成视频年人黄网站免费视频| 国产精品99爱免费视频| 亚洲日韩AV一区二区三区中文| 国产亚洲成av人片在线观看| 日产乱码一卡二卡三免费| 最近免费中文字幕大全免费 | 日韩色日韩视频亚洲网站 | aaa毛片视频免费观看| 亚洲中文字幕无码mv| 亚洲午夜在线电影| 国产aⅴ无码专区亚洲av麻豆| 免费观看男人免费桶女人视频 | 亚洲色大成网站WWW久久九九| 日本免费v片一二三区| 免费观看无遮挡www的视频| a级午夜毛片免费一区二区| 特级毛片A级毛片免费播放| 亚洲欧美日韩中文高清www777| 久久久久亚洲精品日久生情 | 啦啦啦高清视频在线观看免费 | 免费a级毛片高清视频不卡| 亚洲精品视频在线观看免费| 久久青草精品38国产免费| 国产免费久久久久久无码|