plsql一直正在编译_在PLSQL中编译复杂的java

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 = "http://172.2.2.1/wms/services/ws";

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){

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值