使用Java编写Oracle存储过程

开发 后端 Oracle 数据库运维
从Oracle 8开始我们可以使用Java来编写Oracle存储过程。Oracle自带一个JVM,内置对Java的支持,任何Java能做的事情你都可以放到Oracle里面来做。

通常我们都使用Ps/SQL为Oracle编写存储过程,从Oracle 8开始我们可以有另一种选择:Java。8.0开始,Oracle自带一个JVM,内置对Java的支持,任何Java能做的事情你都可以放到Oracle里面来做,你甚至可以在里面操作db2。这让Oracle具备了极其巨大的扩展能力,只要你愿意,完全可以开发一个trigger,让它在适当的时候给管理员的msn发送一条即时消息。

好消息说完了,现在是坏消息:由于ps/SQL是过程化的语言,它基本上不具备多态的概念,供Oracle使用的Java方法必须申明为static,所以在Oracle中你无法使用Java的动态特性,比如接口、反射等。不过这并不妨碍你用Java做爱做的事。

我们以一个简单的hello world为例,我想任何一个有经验的Java程序员都能够通过这个例子,派生出其他希奇古怪的应用,有好的创意记得要与我共享,我的msn是

首先是创建一个Java类,你可以用Jbuilder/Eclipse来编写,也可以直接在Oracle的控制台里面创建。前者不多说,看看后一种方式。

启动SQL plus,执行如下命令:

create or replace and compile java source named "hello_sp" as 
package org.bromon.oracle; 
public class Hello 
{ 
  public static String say(String name) 
  { 
    return "你好,"+name; 
  } 
} 

Java程序已创建。

然后在Oracle中把这个类导入成为一个函数,执行命令:

create or replace function hello_sp(name varchar2) return varchar2 
as language java name  
'org.bromon.oracle.Hello.say(java.lang.String) return java.lang.String'; 

函数已创建

现在可以调用该函数,执行:

select hello('bromon') from dual;

返回结果:你好,bromon

有一个需要注意的问题是,假如我们的java方法是没有参数的,比如:

public static String say() 
  { 
    return "你好”; 
  } 

那么在创建函数的时候,函数名不应该有扩号:hello_sp,否则会报告函数有编译错误。

如果你的Java类是在IDE里面编写的,那么只需要在oracle中加载编译过的class文件即可,方法是:

启动enterprise manage console,在“方案”下找到“源类型”,右击”Java类”,选择”加载Java“,选择对应的class文件即可。

【编辑推荐】

  1. Oracle存储过程开发实例
  2. ASP调用oracle存储过程
  3. ASP.NET调用Oracle存储过程实现快速分页
责任编辑:佚名 来源: bromon
相关推荐

2010-04-07 12:08:28

Oracle存储过程

2010-04-27 17:21:39

Oracle存储过程

2010-04-15 16:06:02

Oracle存储过程

2010-11-12 12:01:08

Oracle存储过程

2010-11-16 14:30:32

Oracle存储过程

2012-03-08 10:18:33

JavaOracle

2010-10-26 14:50:11

oracle存储过程

2011-07-08 16:07:41

Oracle job存储过程

2009-07-22 15:58:34

JDBC调用Oracl

2010-10-29 16:17:55

Oracle存储过程

2010-04-16 11:03:02

Oracle存储过程

2010-04-16 10:11:20

Oracle存储过程

2010-11-19 11:32:25

Oracle存储过程

2010-10-28 10:10:48

oracle存图片

2010-10-29 16:12:51

Oracle存储过程

2011-04-15 10:56:22

2010-04-07 13:12:25

Oracle存储过程

2011-04-13 09:45:15

Oracle存储

2009-03-25 10:48:08

存储银行Oracle

2010-07-06 14:06:52

SQL Server存
点赞
收藏

51CTO技术栈公众号