| 
 
| 
| 
| | « | October 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 | 31 |  | |  | 
 |  公告
 |  
| 戒除浮躁,读好书,交益友 |  
 
 
 
 
 
 
| Blog信息 |  
| blog名称:邢红瑞的blog日志总数:523
 评论数量:1142
 留言数量:0
 访问次数:9729427
 建立时间: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 » 
 
 |