PL/SQL程序中调用Java代码(转)

简介: 主要是学习PL/SQL调用JAVA的方法. 平台:WINDOWS 1.首先使用IDE写好需要调用的java代码,再添加"create or replace and compile java source named 名字 as",然后在PL/SQL中执行   create or r...

 

主要是学习PL/SQL调用JAVA的方法.

平台:WINDOWS

1.首先使用IDE写好需要调用的java代码,再添加"create or replace and compile java source named 名字 as",然后在PL/SQL中执行

 

create or replace and compile java source named getosmac as

import java.io.InputStreamReader;
import java.io.LineNumberReader;

public class GetOSMac {
    /**
     * 获取MAC地址
     */
    public static String getMac() {
        String result = "";
        try {
            Process process = Runtime.getRuntime().exec("ipconfig /all");
            /**
             * 通过执行dos命令IPCONFIG / ALL来获取
             */
            InputStreamReader ir = new InputStreamReader(
                    process.getInputStream());
            LineNumberReader input = new LineNumberReader(ir);

            String line;

            while ((line = input.readLine()) != null)

                if (line.indexOf("Physical Address") > 0) {

                    String macAddr = line.substring(line.indexOf("-") - 2);

                    result = macAddr;

                }
        } catch (java.io.IOException e) {
            System.err.println("IOException " + e.getMessage());
        }

        System.out.println("Mac:" + result);
        return result;
    }

    public static void main(String[] args) {
        getMac();
        System.out.println("OK!!!");
    }

}

2.然后创建函数调用该JAVA SOURCE的Fuction

create or replace function GetMac return varchar2 is
  language java name ' GetOSMac.getMac() return java.lang.String'; 

3.调用函数.

SYS@orcl> select GetMac AS MAC from dual;  
  
MAC  
------------------------------------------------  
  
50-E5-49-17-EC-82  
  
已选择 1 行。  

http://blog.csdn.net/edcvf3/article/details/8771453

常见错误及解决办法:

问题一:
ERROR at line 1: ORA-29538: Java not installed

解决方法
1.检查有没有安装JAVA组件
select * from voptiontwheret.PARAMETER=Java;OracleUniversalInstallerJAVA2.1oracledbmsjava.selectdistinctowner,namefromdbasourcewherelower(NAME)=dbmsjava;33.sqlplussysORACLE_HOME/javavm/install/initjvm.sql
SQL>@?/javavm/install/initjvm.sql;

问题二:
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception:
java.security.AccessControlException: the Permission (java.io.FilePermission
/home/accmgrctl/src/server read) has not been granted to SQLVIEW. The PL/SQL to
grant this is dbms_java.grant_permission( 'SQLVIEW',
'SYS:java.io.FilePermission', '/home/accmgrctl/src/server', 'read' )
ORA-06512: at "SQLVIEW.PKG_FILE_API", line 1
解决方法:
这是由于oracle用户没有访问那个目录的权限,把源代码入在oracle有权限访问的目录下
或者用以下语句授权
EXEC Dbms_Java.Grant_Permission('oracle_username','java.io.FilePermission', '*','read ');
 

 

 
问题三:
ERROR at line 1:
ORA-29913: error in executing ODCIEXTTABLEOPEN callout
ORA-29400: data cartridge error
KUP-00552: internal XAD package failed to load
ORA-06512: at "SYS.ORACLE_LOADER", line 19
解决方法:
这是110202 上的又一新BUG(外部表的读取)
Need to replace the language specific (non-english) kup<lang>.msb file 
with the english version.

1. cd ORACLEHOME/rdbms/mesg2.Replace<lang>withyourinstalledlanguagesfile.mvKUP<lang>.msbtoKUP<lang>.msb.BAK3.Copy<us>versionovercurrent<lang>copyofkupmsbfile.cpkupus.msbtoKUP<lang>.msb4.reruntheselectagainsttheexternaltableORACLE_HOME/rdbms/mesg 下有两个文件:
kupzhs.msb 和 kupus.msb, 其默认使用了kupzhs.msb
此时,我把kupzhs.msb 重新命名为 kupzhs.msb.bak
之后在测试, OK: 
http://blog.csdn.net/liulunxu/article/details/8494556
http://bbs.csdn.net/topics/280052330
http://alvin.blog.51cto.com/210283/91178
 

create or replace and compile java source named getosmac as
import java.io.InputStreamReader;import java.io.LineNumberReader;
public class GetOSMac {    /**     * 获取MAC地址     */    public static String getMac() {        String result = "";        try {            Process process = Runtime.getRuntime().exec("ipconfig /all");            /**             * 通过执行dos命令IPCONFIG / ALL来获取             */            InputStreamReader ir = new InputStreamReader(                    process.getInputStream());            LineNumberReader input = new LineNumberReader(ir);
            String line;
            while ((line = input.readLine()) != null)
                if (line.indexOf("Physical Address") > 0) {
                    String macAddr = line.substring(line.indexOf("-") - 2);
                    result = macAddr;
                }        } catch (java.io.IOException e) {            System.err.println("IOException " + e.getMessage());        }
        System.out.println("Mac:" + result);        return result;    }
    public static void main(String[] args) {        getMac();        System.out.println("OK!!!");    }
}

 

目录
打赏
0
0
0
0
96
分享
相关文章
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
189 96
接替此文【下篇-服务端+后台管理】优雅草蜻蜓z系统JAVA版暗影版为例-【蜻蜓z系列通用】-2025年全新项目整合搭建方式-这是独立吃透代码以后首次改变-独立PC版本vue版搭建教程-优雅草卓伊凡
JVM实战—1.Java代码的运行原理
本文介绍了Java代码的运行机制、JVM类加载机制、JVM内存区域及其作用、垃圾回收机制,并汇总了一些常见问题。
JVM实战—1.Java代码的运行原理
|
12天前
|
Java代码结构解析:类、方法、主函数(1分钟解剖室)
### Java代码结构简介 掌握Java代码结构如同拥有程序世界的建筑蓝图,类、方法和主函数构成“黄金三角”。类是独立的容器,承载成员变量和方法;方法实现特定功能,参数控制输入环境;主函数是程序入口。常见错误包括类名与文件名不匹配、忘记static修饰符和花括号未闭合。通过实战案例学习电商系统、游戏角色控制和物联网设备监控,理解类的作用、方法类型和主函数任务,避免典型错误,逐步提升编程能力。 **脑图速记法**:类如太空站,方法即舱段;main是发射台,static不能换;文件名对仗,括号要成双;参数是坐标,void不返航。
35 5
课时8:Java程序基本概念(标识符与关键字)
课时8介绍Java程序中的标识符与关键字。标识符由字母、数字、下划线和美元符号组成,不能以数字开头且不能使用Java保留字。建议使用有意义的命名,如student_name、age。关键字是特殊标记,如蓝色字体所示。未使用的关键字有goto、const;特殊单词null、true、false不算关键字。JDK1.4后新增assert,JDK1.5后新增enum。
课时7:Java程序基本概念(注释)
课时7介绍了Java程序中的注释。编程语言有其语法和语义,注释有助于理解代码需求,防止断档。Java支持三类注释:单行(//)、多行(/* */)和文档注释(/** */)。注释不会被编译器编译。范例中展示了如何在代码中使用注释,并强调了注释对项目文档管理的重要性。
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
【YashanDB知识库】Java程序调用存储过程,在提取clob时报YAS-00004
课时146:使用JDT开发Java程序
在 Eclipse 之中提供有 JDT环境可以实现java 程序的开发,下面就通过一些功能进行演示。 项目开发流程
课时5:第一个Java程序
课时5介绍了编写第一个Java程序的步骤,包括创建Hello.java文件、编写“Hello World”代码、编译和运行程序。主要内容有:1) 新建并编辑Hello.java;2) 编译Java源文件生成.class文件;3) 通过命令行解释执行Java程序;4) 解释主方法的作用及信息输出操作。本课强调了类定义、文件命名规则和基本程序结构的重要性,并建议初学者使用记事本编写代码以熟悉基础语法。
|
2月前
|
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
64 17
消防救援支队消防员单兵装备智能养护舱电机驱动java版程序(二)
本文探讨消防救援中智能养护舱电机驱动的Java程序设计,作为系列文章第二部分。通过自动化和智能化手段,智能养护舱提升了装备维护效率与准确性。文章详细介绍了电机驱动模块的设计与实现,包括硬件选型、PID控制策略、安全保护机制及Java程序架构,确保电机精确控制、稳定性和安全性。未来将优化功能并引入智能算法和物联网技术,进一步提升装备维护智能化水平。

热门文章

最新文章