即兴的灵感

思维是一种艺术; 艺术需要灵感。

博客好友

最新评论

JAVA与Oracle存储过程(二)

      在前一篇文章中简单介绍了JAVA程序如何调用Oracle存储过程的基本语法程序结构, 本文将介绍JAVA跟Oracle的另一种关系,即通过JAVA编写Oracle存储过程 通常情况下,我们都是使用Oracle数据库系统中的ps/sql语句来oracle编写各种存储过程,不过,在Oracle的第八个版本8之后,为我们提供了编写存储过程的另一种新的选择,那就是使用JAVA来编写Oracle存储过程。从Oracle8.0版本开始,在Oracle数据库系统中自带了java虚拟机jvm,因此使得Oracle内置了对JAVA的全面支持,我们在使用JAVA可以实现的任何功能现在都可以放到Oracle中来实现,当然我们也可以在oracle中来操作其他数据库。JAVA的加入让Oracle展能力得到了升华,我们可以定义一个触发器来在进行任何数据库操作的时候对外界进行其他操作的功能。
   下面准备举个例子来说明下如何通过JAVA来创建Oracle存储过程,例子不在于有多高级,功能不在于多完善,我想,如果能从一个简单例子,引申出去,去繁衍更多的方法,去实现更多你自己需要的功能,这才是简单例子的作用。所以,认为我写的简单,写的肤浅的人你可以不用看,但是我写出来就是为了让任何有JAVA基础的人都能容易懂得,而从简单的例子去构造出其他的应用。个人认为,中国软件界更需要有的程序员素质,就是能更多帮助那些初学者,让他们少走弯路,才能让我国的IT行业有更好的发展,对那些将初学者的问题拒之千里之外的程序员的做法,在此表示遗憾....
   当然,以上是题外话,但是希望能引起大家的思考,,,,能引起在我博客话我发的内容简单的人的反思。。。
   二、使用JAVA创建Oracle存储过程
   先看下如何使用JAVA来编写Oracle存储过程,我们在Oracle的sql plus中编写语句。
   Ⅰ、启动SQL PLUS
   Ⅱ、编写JAVA类,定义JAVA类别名,本存储过程为简单地输出传入参数的平方值。

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

/**

 *通过JAVA类来 创建Oracle存储过程

 *

**/

package  org.oraclejava.pro;

public   class  javaCreatePro

{

  public   static   String  test( int num)

 {

    return  num+ "的平方为: " +num*num;

 }
}


   Ⅲ、将JAVA类中的方法test创建为一个Oracle函数方法
create or replace function PF_FUN(name integerreturn varchar2 as language java name 'org.oraclejava.pro.javaCreatePro.test(java.lang.Integer) return java.lang.String'
   Ⅳ、在控制台直接调用创建的Oracle函数

  select PF_FUN(10) from dual;

   Ⅴ、输出结果
10的平方为:100

   以上即是在Oracle中的SQL PLUS中使用JAVA程序来产生Oracle存储过程的演示例子,演示了其基本语法的实现跟简单的功能实现,可以看出在JAVAOracle之间存在很多有趣的用法,因为oracle中有java虚拟机,使得Oracle变得更加有趣更加丰富多彩。

                                           转载请注明出处!



 
凤凰涅槃/浴火重生/马不停蹄/只争朝夕
     隐姓埋名/低调华丽/简单生活/完美人生

posted on 2008-12-07 23:00 poetguo 阅读(7971) 评论(13)  编辑  收藏 所属分类: OracleJAVA

评论

# re: JAVA与Oracle存储过程(二) 2008-12-08 07:59 beyond

oracle 真牛,支持  回复  更多评论   

# re: JAVA与Oracle存储过程(二) 2008-12-08 09:38 caliven

十分感谢  回复  更多评论   

# re: JAVA与Oracle存储过程(二) 2008-12-08 10:15 分享爱的空间

很有意思,也开阔了我的思路,原来还可以这样使用oracle,这样看来,可以解决很多实际应用的问题,比如当某个记录发生变化时,可以给外面发个信号,用于做一些事情。
之前,总认为我们只能主动去调用oracle,现在看来oracle也可以自动调用外面的一些服务。
我也写了一遍oracle存储过程的文章(http://www.blogjava.net/jiangjf/archive/2007/12/05/165514.html)
多交流。  回复  更多评论   

# re: JAVA与Oracle存储过程(二)[未登录] 2008-12-08 16:41 zxbyh

其实lz应该讲一哈为什么要用Java的存储过程,而不用Pl-sql的存储过程.

各自适合什么情况..  回复  更多评论   

# re: JAVA与Oracle存储过程(二) 2008-12-11 23:09 wenlin

DB2也可以,SQL Server 也行啊  回复  更多评论   

# re: JAVA与Oracle存储过程(二) 2010-09-01 11:17 612

受教了,楼主说的好!
将JAVA类中的方法test创建为一个Oracle函数方法,貌似这个方法不太对?警告: 创建的函数带有编译错误。  回复  更多评论   

# re: JAVA与Oracle存储过程(二) 2011-05-06 16:14 xiaofen

页面显得太乱啦  回复  更多评论   

# re: JAVA与Oracle存储过程(二) 2011-06-01 14:42 择业玩家

NB  回复  更多评论   

# re: JAVA与Oracle存储过程(二)[未登录] 2011-07-21 09:17 michael

create or replace function PF_FUN(name number) return varchar2 as
language java name 'org.oraclejava.pro.javaCreatePro.test(java.lang.Integer) return java.lang.String';

Integer 改为number 可编译通过,但是执行的时候,提示无java类  回复  更多评论   

# re: JAVA与Oracle存储过程(二)[未登录] 2012-11-30 10:43

楼主代码无法通过系统,找不到JAVA建立的CLASS方法  回复  更多评论   

# re: JAVA与Oracle存储过程(二)[未登录] 2012-11-30 10:52

楼主不太负责,首先语法就有问题,在ORACLE中根本就不能用INTEGER类型表示整形,改成NUMBER后,编译JAVA通过了,但调用时候根本找不到CLASS,推测是楼主没有测试代码,按自己想象的天马星空,太不严谨了。我们初学者苦恼。
真不知道,那些称赞楼主的人,有没有自己去运行一遍代码啊????  回复  更多评论   

# re: JAVA与Oracle存储过程(二)[未登录] 2012-11-30 12:19

确切的说是找到了类,但找不到类中的方法:test
--------------
哪位兄弟,指点一下,楼主的代码中,哪出问题了????
有网友谁说过,ORACLE中的JAVA,方法命名很重要,不要用"main"来命名方法名,说改了方法名后,就能调用了。但此处,楼主用的是 test 方法名,而且是静态的,符合要求的。  回复  更多评论   

# re: JAVA与Oracle存储过程(二)[未登录] 2012-11-30 15:59

知道原因了,楼主以上代码有2处错误,导致无法正确运行。

仔细观察包装语句(即将JAVA包装成ORACLE函数FUNCTION)
---------------------------------------------
create or replace function PF_FUN(name integer) return varchar2 as language java name 'org.oraclejava.pro.javaCreatePro.test(java.lang.Integer) return java.lang.String';

错误1:function PF_FUN(name integer) --ORACLE中没有integer类型
该错误导致:无法编译。
改正为:function PF_FUN(name number)

错误2:org.oraclejava.pro.javaCreatePro.test(java.lang.Integer)
此处在关联JAVA类中的方法,回到JAVA源码一看让人啼笑皆非
改正为:org.oraclejava.pro.javaCreatePro.test(int)
-----------------------

  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: