原文地址:在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){
          
        }
  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程序已经可以调用了。

在PLSQL中编译复杂的java(转)的更多相关文章

  1. 在 Sublime Text 2 中编译和运行 Java 程序,以及输出中文出错问题解决办法

    Sublime Text 2 是我最喜欢用来编码的文本编辑器,如果你尝试使用后相信你也会喜欢上它的.在这篇文章中我们将讨论如何在 Sublime Text 2 中编译和运行 Java 程序. 第一步: ...

  2. 【Java】【转】在命令行中编译和运行java

    原文:http://blog.csdn.net/u010900574/article/details/50792353 同时加载编译多个jar包和java文件 在个人平常使用或者当我们把代码部署到Li ...

  3. 在linux命令行中编译和运行java文件

    同时加载编译多个jar包和java文件 在个人平常使用或者当我们把代码部署到linux服务器上的时候,我们经常需要通过命令行编译和运行java文件,网上关于这个的方法大多是通过 javac -cp f ...

  4. 记录5-如何在UltraEdit中编译和运行Java

    1点击“高级”,再点击“工具配置” 2点击“插入”,在“菜单项”名称上输入“编译java程序”,在“命令行”里输入“javac %n%e”,在工作目录上填“%p”. 3切换到“输出”项,选择“输出到列 ...

  5. Java 7 中的Switch 谈 Java版本更新和反编译知识

    Java 7 中的Switch 谈 Java版本更新和反编译知识          学习编程,享受生活,大家好,我是追寻梦的飞飞.今天主要讲述的是Java7中的更新Switch实现内部原理和JAD反编 ...

  6. 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类

    一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...

  7. idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8

    问题如上面所叙: > idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8 解决方案: > Setting->Compiler->Ja ...

  8. Centos下命令行编译MapReduce代码(Java)并打包在Hadoop中执行

    前提条件:搭建好Hadoop系统 新建文件夹:input  和  output hdfs dfs -mkdir /inputhdfs dfs -mkdir /output 查看文件系统 hdfs df ...

  9. cmd中编译java脚本 (2013-05-02-bd 写的日志迁移

    此前提是已经搭建好了jdk的编译环境! 先写一个java脚本如:建立一个HelloWord.java //public : 表示此类是公共的 一个java文件中只能有一个public类 //class ...

随机推荐

  1. 【读书笔记】iOS-读取文本文件

    一,文本文件的内容. 二,工程目录 三,ViewController.m - (void)viewDidLoad { [super viewDidLoad]; // Do any additional ...

  2. 开始学习Oracle了

    开始学习Oracle了,加油 参考书Oracle开发实战经典,李兴华老师编著

  3. IOS开发--待研究源码(持续添加更新)

    1.丰富的CAEmitterLayer制作的粒子效果,比如烟花效果 (还未研究) 该项目本人未研究,待以后有时间或者有需求再研究 github源码下载地址:https://github.com/lic ...

  4. eval 为什么加括号

    <!DOCTYPE html> <html> <head> <title>eval学习</title> <script type=&q ...

  5. eclipse创建本地maven

    一.下载maven安装包和maven的eclipse插件 apache-maven-3.3.9-bin.zip eclipse-maven-plugin.zip 下载地址:http://pan.bai ...

  6. Effective Java 29 Consider typesafe heterogeneous containers

    When a class literal is passed among methods to communicate both compile-time and runtime type infor ...

  7. 【php】使用phpdbg来调试php程序

    PHPDBG是一个PHP的SAPI模块,可以在不用修改代码和不影响性能的情况下控制PHP的运行环境 可以在PHP5.4和之上版本中使用.在PHP5.6和之上版本将内部集成 功能 单步调试 灵活的下断点 ...

  8. ajaxFileUpload文件上传

    一.简介 ajaxFileUpload是一种异步的文件上传控件,通过ajax进行文件上传,并获取上传处理结果.在很多时候我们需要使用到文件上传的功能,但是不需要使用那些强大的上传插件.此时就可以使用a ...

  9. oracle树操作(select start with connect by prior)

    oracle中的递归查询可以使用:select .. start with .. connect by .. prior 下面将会讲述oracle中树形查询的常用方式,只涉及到一张表. 一. 建表语句 ...

  10. Eclipse和MyEclipse 手动设置 Java代码 注释模板

    一.目的 1.  为什么需要注释规范? 注释规范对于程序员而言尤为重要,有以下几个原因: 一个软件的生命周期中,80%的花费在于维护. 几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维 ...