PLSQL中调用JAVA程序,由于有&位运算符,所以出错

PLSQL中调用JAVA程序,由于有&位运算符,所以出错,第1张

找到了这么一段,应该是说,java存储过程,不是在sqlplus中直接编译,而是编译好Java程序,然后加载到oracle数据库中,进行调用):

使用Java存储过程进行位运算

Oracle有理由不直接提供位 *** 作支持。由于Oracle提供了极为方便的Java存储过程,我们可以很方便的用来实现所有位 *** 作。

下面我们准备实现四种基本的位 *** 作。关于Java存储过程的内容,本文不给予太多描述,只引用必要的部分用于阐述问题。

首先,我们需要一个Java类,里面实现了位运算的四种基本功能。

public class BitOper {

public static int bitAnd(int a, int b) {

return a &b

}

public static int bitOr(int a, int b) {

return a | b

}

public static int bitXor(int a, int b) {

return a ^ b

}

public static int bitNot(int a) {

return ~a

}

}

为了便于描述问题,我将这个类设计的相当简单。

将其编译后得到BitOper.class。

接下来,使用Oracle提供的一个工具loadjava将上述类加载到数据库中。该工首银具在安装Oracle时已经自动安装。

loadjava –user user_name/password@sid BitOper.class

命令执行完后,如果没有报错则表示加载成功。

最后一步工作是创建PL/SQL包装函数。这里有两种选择,一种是创建独立的函数,一种是创建用包封装的函数。为了减少篇幅,我选择使用第一种。

create or replace function bit_and

(

int1number,

int2number

) return number

DETERMINISTIC

AS LANGUAGE JAVA

NAME 'BitOper.bitAnd(int, int) return int'

/

create or replace function bit_or

(

int1number,

int2number

) return number

DETERMINISTIC

AS LANGUAGE JAVA

NAME 'BitOper.bitOr(int, int) return int'

/

create or replace function bit_xor

(

int1number,

int2number

) return number

DETERMINISTIC

AS LANGUAGE JAVA

NAME 'BitOper.bitXor(int, int) return int'

/

create or replace function bit_not

(

int1number

) return number

DETERMINISTIC

AS LANGUAGE JAVA

NAME 'BitOper.bitNot(int) return int'

/

将上述代码在SQLPLUS中执行后,当前用户就具备了四种基本位 *** 作的功能。

不妨使用几个例子来测试一者简宴下:

select bit_and(9,8) "9and8",

bit_or(3,4) "3or4",

bit_xor(3,5) "3xor5",

bit_not(3) "not3"

from dual

其结果为:

9and8 3or4 3xor5 not3

---------- ---------- ---------- ----------

8 7 6 -4

看起来一切都很简单,你是否这么认咐橡为呢?

一、前言:玩Oracle的人一般都是对电脑很内行的朋友,乎渗态如果不是, *** 作中会碰到很多困难。服务器上安装Oracle 10G或其后版本的Oracle。服务器上安装JAVA运行环境。在本地服务器上先进行实验,用最权高登录 *** 作系统权,用最高登录数据库的权。

二、具体方法:10G及其以后版本的Oracle数据库提供了对Java程序的更多的支持,可用调用JAVA的方法调用 *** 作系统命令。

1. 首先我们创建调用 *** 作系统命令的Java方法

create or replace and compile java source named oscmd as

import java.io.*

import java.lang.*

public class OSCmd extends Object {

    public static int OSCmd(String args) {

        Runtime rt = Runtime.getRuntime()

        int rc = -1

        try {

            Process p = rt.exec(args)

            int bufSize = 4096

            BufferedInputStream bis = new BufferedInputStream(p.getInputStream(), bufSize)

        int len

        byte buffer[] = new byte[bufSize]

        while ((len = bis.read(buffer, 0, bufSize)) != -1)

                System.out.write(buffer, 0, len)

            rc = p.waitFor()

        } catch (Exception e) {

            e.printStackTrace()

            rc = -1

        } finally {

            return rc

        }

    }

}

2. 然后,再创喊困建一个PL/SQL函数调岁源用Java方法

CREATE

 OR REPLACE FUNCTION Run_Cmd(p_Cmd IN VARCHAR2) RETURN NUMBER AS 

LANGUAGE JAVA NAME 'OSCmd.OSCmd(java.lang.String) return integer'

3. 之后我们就可以轻松的在Oracle程序中调用 *** 作系统命令了

declare

    n number

begin

    n := Run_Cmd('Copy C:\temp.txt D:\temp.txt')

end

三、补充说明:在Oracle的SQLPLUS下可以使用Host命令来执行 *** 作系统级别的命令或者可执行文件,PL SQL作为第三方远程联接工具,是不能直接执行这种指令的。

存储枣明过程是 PLSQL 的一个方面的应用,而 PLSQL 是存储过程的基础。

即存储过程需要用到 PLSQL

创建无参存储过程 hello ,无返回值

语法:

删除存储 hello ,语法 drop procedure 过程名

调用存储过程方式一: exec 过程名

exec hello

调用过程存储方式二: PLSQL 程序

调用过程存储方式三: Java 程序 CallableStatement 接口

创建有存储过程的 raiseSalary (编号),为7369号员工涨工资10%,演示in的语法,大小写谈碰不敏感含岩谈

创建有参存储过程 findEmpNameAndSalAndJob (编号),查询7788号员工的姓名,职位,月薪,返回多个值,演示 out 的用法

用存储过程,写一个计算个人所得税的功能


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12344410.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-24
下一篇 2023-05-24

发表评论

登录后才能评论

评论列表(0条)

保存