原文地址:
PLSQL中可以编译运行JAVA程序。
一个简单的例子:
create or replace and compile java source named xxfnd as package xxfnd;
public class Test{ public void Test(){ }public static String helloWorld{
return "success"; }}但是如果真的想在PLSQL中用JAVA做成什么事情,这样的程度是不够的。
需要在PLSQL中使用JAVA的原因
1. JAVA作为开源跨平台的语言,提供了丰富的工具包,可以处理很多复杂的内容,如操作EXCEL,发布Service等等;
2. Oracle开发中有些事情只能用PLSQL来做。比如工作流。
而当我们需要在工作流中借助JAVA完成复杂任务时,需要引用很多jar包。
本文介绍一个完整的例子,在PLSQL中实现复杂的JAVA程序调用。
1. 导入java程序所需jar包。这是很关键的一步。很多文章都语焉不详。
上传所需jar包至应用服务器,这里假设绝对路径为:
/home/applqv/pushjar/
telnet至应用服务器。
sqlplus /nolog
connect sys/pass as sysdba;使用如下语法将jar包加载至数据库:
call dbms_java.loadjava('-v -r PUBLIC -synonym /home/applqv/pushjar/axis.jar');
在导入中可能会报错,但是报错的时候,大部分jar包中的class文件应该已经成功加载了。所以有时候可以忽略这个报错。
可以用以下SQL查询已经成功加载的class
select * from dba_objects where object_type='JAVA CLASS' AND OBJECT_NAME LIKE '%com/ibm/wsdl%'
可以在数据库parameter user_dump_dest 路径中找到dbms_java.loadjava的trace文件。其中会有详细的log记录。
每次执行dbms_java.loadjava都会有trace。
2. 在PLSQL中编写java程序。可以直接将按照以下语法写好的java程序贴到PLSQL中,然后F8编译。
create or replace and compile java source named xxfnd as package xxfnd;
import com.google.gson.Gson;import com.google.gson.GsonBuilder; import java.util.HashMap;import java.util.Map;import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;public class Test{ public void Test(){ }public static String helloWorld(String a){
String url = ""; try{ Service service = new Service(); org.apache.axis.client.Call call = (org.apache.axis.client.Call)service.createCall(); call.setTargetEndpointAddress(url); call.setOperationName(new QName("null", "push")); Map map = new HashMap(); for (String key: map.keySet()) { String sreMessage = "{"Push": [{"username": "" + key + "","appname": "BG_405","pushcontents": "" + map.get(key) + ""}]} "; System.out.println("请求:" + sreMessage); System.out.println("返回:" + call.invoke(new Object[] { sreMessage })); System.out.println( "aaa"+call.getMessageContext().getCurrentMessage().getMessageType()); } } catch(Exception e){ } return "success"; }}3. 查看编译是否出错:show errors java source xxfnd;
4.将java程序封装在PLSQL包中:
create or replace package test_pkg is
function hello_world(a varchar2) return varchar2;end test_pkg;/create or replace package body test_pkg is
function hello_world(a varchar2) return varchar2 is language java name 'xxfnd.Test.helloWorld(java.lang.String) return String';end test_pkg;/5. 至此,java程序已经可以调用了。