oracle 调用函数里怎样调用自己写好的函数

Oracle数据库中调用Java类开发存储过程、函数的方法
的开发非常灵活,不仅支持最基本的,而且还提供了独有的,除此之外,还可以用时下最流行的编程语言来做开发。随着对oracle的了解越来越多,越来越禁不住oracle的诱惑,oracle技术真的是一门很有趣的学问。之前,我在博客中总结了挺多有关SQL、PL/SQL的,但是对于oracle数据库中Java类的调用却没有总结,也是因为之前不太会,这会儿总结了一下,特来分享。1、oracle中调用Java类的基本思路要在oracle中调用Java类来实现存储过程、函数,我觉的大概的思路是这样的:(1)首先编写Java代码,可以用自己喜欢的代码编辑器编辑,编辑好了以后,可以将代码编译成.class文件,也可以打成jar包,也可以啥都不操作,就是一个Java源代码文件在那放着。(2)想办法将已经写好的Java代码导入到oracle数据库中,这里导入主要有两种方法,一种是使用loadjava命令,另一种是直接在编写PL/SQL代码的时候写Java代码,这两种方法我在下面会详细总结。(3)编写存储过程、函数来封装Java代码,以实现后面对Java功能的调用。(4)准备工作已经做完了,最后就是调用了,调用的方式与PL/SQL完全一样,没啥不同的。2、loadjava命令介绍在切入正题之前,先简单介绍下loadjava命令及其用法,loadjava命令有很多的参数,也没有必要全部都了解,loadjava的调用规则如下图1所示:图1:loadjava的调用规则loadjava命令不是在sql*plus中调用的,而是在cmd窗口中,有关loadJava的各个参数的意思,可以使用:loadjava -help 命令来获得详细帮助。本文中主要用到的参数有-u(用于输入用户名及密码)、-v(用于输出详细的反馈信息)、-resolve(对于没有编译的Java文件,可以用resolve来编译)、-f(这个命令我在例子中没有用到,它的意思是force,表示不管之前是否已经导入过该Java类,都强制再次导入)。loadjava可以实现对class文件、jar文件、resource文件、property文件的导入,当导入class文件时,可以用如下命令:loadjava&–u&username/userpassword&–v&filename.class当导入Java文件时,可以用如下命令:loadjava&–u&username/userpassword&–v&-resolve&filename.java当导入jar文件时,可以用如下命令:loadjava&–u&username/userpassword&–v&-resolve&filename.jar3、举例说明oracle调用Java全步骤例子:一个简单的需求,用Java代码实现求圆的面积,圆周率PI为3.14,输入的参数为圆的半径R,输出圆的面积S,要求可以在oracle中用PL/SQL代码调用该Java类实现求圆的面积的功能。Step 1:编写Java代码,PL/SQL Developer本身虽然支持编写Java代码,但是毕竟不是专业的,对Java的工具提供的不是特别好,我喜欢用MyEclipse开发好以后复制过来,下面是我在MyEclipse中开发好的代码。//&圆工具类,计算圆的面积
public&class&CircleTools&{
&&//&定义常量PI
&&public&static&final&double&PI&=&3.14;
&&//&计算面积
&&public&static&double&calcSquare(double&r)&{
&&&&return&PI&*&r&*&r;
}注意在写Java代码的时候,为了能够直接能够在oracle中被调用,所以这里在需要调用的方法前要加上public和static。Step 2:写好Java代码,下面就是要将Java导入到oracle数据库中,导入的方法在前文提到过可以用loadJava或者直接写。如果要用loadJava导入,先把上面的代码文件保存为CircleTools.java,然后在cmd命令行中进入该目录下,然后执行如下命令:loadjava&–u&username/userpassword&–v&-resolve&CircleTools.java执行上面的命令就OK了,下面提供另一种方法,就是直接在PL/SQL中写,写法如下:CREATE&OR&REPLACE&AND&COMPILE&JAVA&SOURCE&NAMED&circletools&AS
//&圆工具类,计算圆的面积
public&class&CircleTools&{
&&//&定义常量PI
&&public&static&final&double&PI&=&3.14;
&&//&计算面积
&&public&static&double&calcSquare(double&r)&{
&&&&return&PI&*&r&*&r;
}我的oracle开发工具是PL/SQL Developer,所以我在PL/SQL Developer中执行了上面这段代码,然后查询user_objects表,可以发现CircleTools类已经被导入进了oracle数据库中,如下图2所示:图2:user_objects表中查询到CircleTools类Step 3:编写存储过程(procedure)或者函数(function)来封装,以实现以后的调用,一般来说,如果一个Java方法没有返回值,那么就封装成存储过程,如果有返回值,就封装成函数,这里我只给出一个封装成函数的例子:CREATE&OR&REPLACE&FUNCTION&calc_square(r&IN&NUMBER)&RETURN&NUMBER&AS
&&LANGUAGE&JAVA&NAME&'CircleTools.calcSquare(double)&return&double';Step 4:上面几步基本上已经实现了全部了,最后一步测试一下,我test了一下calc_square这个函数,结果如下图3所示:图3:测试calc_square函数Step 5:如果不想用那个Java类了,可以用dropjava命令删除掉系统中的Java,这个跟loadjava很相似,下面截图:图4:dropjava命令例如:dropjava&-user&username/userpassword@db&-v&javasourcename注意上面删除的是Java的source name,不是class name,即对象的OBJECT_TYPE是JAVA SOURCE,不是JAVA CLASS。这个地方我不太确定,不过我直接删除类名是报错了,先这样写着吧,后面发现错了,我会纠正的。在oracle中调用Java source的思路大概就是上面这样,一想到可以把Java代码跑在oracle中是不是还是蛮激动的,功能一下子就有扩展了许多。本帖子已过去太久远了,不再提供回复功能。您的举报已经提交成功,我们将尽快处理,谢谢!
你可以选中〔独立启动〕使用OEM
而不是选择〔Oracle Management Server〕
就可以不必创建资料档案库了。
Oracle Ente...
在f2单元格中输入
=A2*B2*E2+((C2-A2)/2*D2*E2/2)*2
(注意,等号一定要写)
然后定位到F2单元格,将鼠标移到单元格右下角的...
有两种方式:
  第一种:直接右击项目--& Build Path ---&Add External A...
  选择包文件就行了, 但这种方式只...
打开word后,点击插入菜单,打开“对象”,找到Microsoft 公式3.0,选中它以后单击左键(双击也行)就可以打开公式编辑器了。
你也可以通过“视图→工...
嘛意思?说明白点,oracle是db引擎,从db中读取数据,dbms在读取数据的时候会把数据读到内存,搞不清你想问的是什么
大家还关注}

我要回帖

更多关于 oracle调用函数返回值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信