如何在oracle中调用Java外部例程?

menlion 2002-07-04 09:26:07
我java写好了一个Oracle的外部例程,在JDK中调试通过。功能执行等均正确无误。

可是载入到Oracle中后,调用成功(SQL*plus显示的),可是没有完成预期的功能。

本来打算使用debugproxy进行调试,但是匆忙中没有时间看debugproxy的详细文档。还请各位大侠出手相助!

简化版的外部例程源码如下:

import java.sql.*;
import oracle.jdbc.driver.*;

public class C
{
public static void c()
{
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;

try
{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn =
// conn = new OracleDriver().defaultConnection();
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

rs = stmt.executeQuery("insert into test (id, name) values ('1', 'name');");
stmt.close();
conn.close();
}
catch(Exception e)
{}
}
}
...全文
49 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
menlion 2002-07-06
  • 打赏
  • 举报
回复
问题已解决,谢谢三位的热情帮助。同时感谢developer2002的场外帮助。^_^
menlion 2002-07-05
  • 打赏
  • 举报
回复
to sun9989(阿松):
我就是按照此书的描述进行的,就出现了问题所说的现象。

to developer2002(开发者2002):
不好意思,我不太明白你所说的。如果没有(显式的?)连接的话,怎么执行SQL查询呢?能否详细说明一下?

to 3yugui(亿硅):
如果存储过程是如你所写的样子(也就是过程中是一些标准SQL语句的话),是没有问题的。但是,如果存储过程调用的是外部例程(这个词语是从sun9989提到的书上摘下来的)的话,就不行了。

www.jspcn.com: This Domain May Be Available. ^_^

谢谢大家
3yugui 2002-07-04
  • 打赏
  • 举报
回复
www.jspcn.com
3yugui 2002-07-04
  • 打赏
  • 举报
回复
Jsp中调用Oracle存储过程的小例子

/*执行一条insert语句并传参数*/
create or replace procedure p_test2(i in number) as
begin
insert into t values (i,'x'||to_char(i));
commit;
end;
/

<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@page import="java.sql.*"%>
<html>
<body>
<table>
<tr><td>aaa</td><td>bbb</td></tr>
<%
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@192.168.1.6:1521:db";

Class.forName(driver);
Connection conn = DriverManager.getConnection(strUrl, "scott", "tiger");

String procedure = "{call p_test2 (?) }";
CallableStatement cstmt = conn.prepareCall(procedure);
cstmt.setInt(1,33);
cstmt.executeUpdate();

Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from t");

while(rs.next())
{
out.println("<tr><td>" + rs.getString(1) + "</td><td>" + rs.getString(2) + "</td></tr>");
}

rs.close();
stmt.close();
conn.close();
%>
</table>
<p>
<%
out.print(conn.isClosed());
%>

</body>
</html>
</body>
</html>
developer2002 2002-07-04
  • 打赏
  • 举报
回复
如果是把java代码上载到oracle作为java存储过程使用的话,不需要也不可以有显示的数据库连接。
sun9989 2002-07-04
  • 打赏
  • 举报
回复
“ORACLE8i plsql高级程序设计”一书中有叙述。
menlion 2002-07-04
  • 打赏
  • 举报
回复
上面有错,应为:
conn = DriverManager.getConnection("jdbc:odbc:sowf", "system", "manager");

谢谢!

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧