| « | November 2025 | » |  | 日 | 一 | 二 | 三 | 四 | 五 | 六 |   |  |  |  |  |  | 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |  |  |  |  |  |  |  |  
  |    公告 |  
戒除浮躁,读好书,交益友  |    
 
 
 
 
 
| Blog信息 |  
| 
 blog名称:邢红瑞的blog 日志总数:523 评论数量:1142 留言数量:0 访问次数:9731084 建立时间:2004年12月20日   |   
 
  
 
  |    | 
  
| 
  [数据库]java读取oracle的存储过程 原创空间 
邢红瑞 发表于 2005/4/16 19:05:36   |  
| 
java读取oracle的存储过程网上的例子不少,都太简单,没有一个返回参考游标的,返回记录集,自己写一个怕日后忘了。
oracle的PLSQL
CREATE OR REPLACE package chapter_13 as TYPE rs IS REF CURSOR ;procedure founder(oFields out rs);
end;
CREATE OR REPLACE package body chapter_13 as
PROCEDURE founder(oFields out rs) ISBEGIN  open oFields for   select * from person;END founder;end;java代码
package jdbc;
import java.io.*;import java.sql.*;import java.text.*;import oracle.jdbc.OracleTypes;
public class TestStoredProcedures {    Connection conn;
    public TestStoredProcedures() {        try {            DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());            conn = DriverManager.getConnection(                    "jdbc:oracle:thin:@localhost:1521:orcl", "jola", "jola");        } catch (SQLException e) {            System.err.println(e.getMessage());            e.printStackTrace();        }    }
    public static void main(String[] args) throws Exception {        new TestStoredProcedures().process();    }
    public void process() throws SQLException {                long start = 0;        long end = 0;        CallableStatement cstmt = null;
        try {            start = System.currentTimeMillis();
            // *** SQL92 escape syntax ***
                        cstmt = conn.prepareCall(                    "{call  chapter_13.founder(?)}");            cstmt.registerOutParameter(1, OracleTypes.CURSOR);            ResultSet rs = null;
            cstmt.execute();             rs = (ResultSet)cstmt.getObject(1);            while (rs.next()) {                System.out.println(rs.getString("NAME"));            }            rs.close();
            end = System.currentTimeMillis();            System.out.println("Average elapsed time = " +                               (end - start) / 8 + " milliseconds");        } catch (SQLException e) {            System.err.println("SQL Error: " + e.getMessage());        } finally {            if (cstmt != null) {                try {                    cstmt.close();                } catch (SQLException ignore) {}            }        }    }
    protected void finalize() throws Throwable {        if (conn != null) {            try {                conn.close();            } catch (SQLException ignore) {}        }        super.finalize();    }}
  |    
 |   
   
| 
 回复:java读取oracle的存储过程 原创空间 
s(游客)发表评论于2008/9/10 14:21:27   |  
| 
关键是用java程序调用确实是没问题,但是我在pl/sql中想去直接访问这个过程,却不知道如何下手
以下为blog主人的回复:
 没有任何参数 |    
 |   
   
| 
 回复:java读取oracle的存储过程 原创空间 
green.yang(游客)发表评论于2008/9/10 14:19:48   |  
| 不行呀大师,搞了好长时间,关键是这个过程的参数是个游标确实不好访问,我用call chapter_13.founder(),这里面的参数确实不知道填什么,一填就错 |    
 |   
   
| 
 回复:java读取oracle的存储过程 原创空间 
s(游客)发表评论于2008/9/10 13:06:31   |  
| 写的很好,我想问一下你这个如果在控制台用pl/sql语句怎样去访问包(chapter_13)下的存储过程(founder)。通过exec chapter_13.founder,这样好像不行
以下为blog主人的回复:
 应该是可以的啊 |    
 |   
 
  »  1 »  
  |