Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104559133
  • 博文数量: 19283
  • 博客积分: 9968
  • 博客等级: 上将
  • 技术积分: 196062
  • 用 户 组: 普通用户
  • 注册时间: 2007-02-07 14:28
文章分类

全部博文(19283)

文章存档

2011年(1)

2009年(125)

2008年(19094)

2007年(63)

分类: Oracle

2008-04-30 21:33:22

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

 

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

 

       我们以一个简单的hello world为例,我想任何一个有经验的java程序员都能够通过这个例子,派生出其他希奇古怪的应用。

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

 

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

 

create or replace and compile java source named "hello_sp" as

/**

 *创建oracle存储过程的java

 *@author bromon

**/

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文件即可。

 

原文:http://zealot.blog.ccidnet.com/blog-htm-itemid-62583-do-showone-type-blog-uid-3388.html

阅读(363) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~