到 Google 资讯主页   
EasyJF首页   资料   源码   软件    论坛   网站    
   使用帮助    
    该信息为本站MyRSS系统缓存内容,部分图片及附件有可能无法正常使用.easyjf.comwww.javaresearch.org无关,不对该信息负责.通过http://www.javaresearch.org/article//showarticle.jsp?column=108&thread=32823访问该信息的原始内容.
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   
使用Java编写oracle存储过程
作者:bromon 来源:www.javaresearch.org  发布时间:2006-03-05 02:47:41.017


使用Java编写oracle存储过程

bromon原创 请尊重版权

    通常我们都使用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是bromon@gmail.com

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

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

  1. create or replace and compile java source named "hello_sp" as
  2. /**
  3.  *创建oracle存储过程的java类
  4.  *@author bromon
  5. **/
  6. package org.bromon.oracle;
  7. public class Hello
  8. {
  9.   public static String say(String name)
  10.   {
  11.     return "你好,"+name;
  12.   }
  13. }

Java以创建。

然后在oracle中把这个类导入成为一个函数,执行命令:
  1. create or replace function hello_sp(name varchar2) return varchar2
  2. as language java name 
  3. 'org.bromon.oracle.Hello.say(java.lang.Stringreturn java.lang.String';


函数已创建

现在可以调用该函数,执行:
  1. select hello('bromon') from dual;


返回结果:你好,bromon

有一个需要注意的问题是,假如我们的java方法是没有参数的,比如:
  1. public static String say()
  2.   {
  3.     return "你好”;
  4.   }

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

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

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


 
相关文章
 
页面功能  【加入收藏】 【推荐给朋友】 【字体:  】 【关闭】   


EasyJF.com 2006 隐私政策 使用EasyJF前必读