PLSQL中调用JAVA程序,由于有&位运算符,所以出错
PLSQL里定义一个JAVA程序CREATEORREPLACEANDCOMPILEJAVASOURCENAMED"TESTJAVA"JAVA程序里由于用到了&位运算符,与...
PLSQL里定义一个JAVA程序
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "TESTJAVA"
JAVA程序里由于用到了&位运算符,与PLSQL的&起冲突,SQLPLUS编译的时候出错
SQL> @/home/oradev/data/FileReadCommon.sql;
290 /
Enter value for buffer:
old 186: int test= 0xff & buffer[index];
new 186: int test= 0xff [index];
请问这JAVA中的&改怎么处理才能正常编译 展开
CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "TESTJAVA"
JAVA程序里由于用到了&位运算符,与PLSQL的&起冲突,SQLPLUS编译的时候出错
SQL> @/home/oradev/data/FileReadCommon.sql;
290 /
Enter value for buffer:
old 186: int test= 0xff & buffer[index];
new 186: int test= 0xff [index];
请问这JAVA中的&改怎么处理才能正常编译 展开
2个回答
展开全部
找到了这么一段,应该是说,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
(
int1 number,
int2 number
) return number
DETERMINISTIC
AS LANGUAGE JAVA
NAME 'BitOper.bitAnd(int, int) return int';
/
create or replace function bit_or
(
int1 number,
int2 number
) return number
DETERMINISTIC
AS LANGUAGE JAVA
NAME 'BitOper.bitOr(int, int) return int';
/
create or replace function bit_xor
(
int1 number,
int2 number
) return number
DETERMINISTIC
AS LANGUAGE JAVA
NAME 'BitOper.bitXor(int, int) return int';
/
create or replace function bit_not
(
int1 number
) 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
看起来一切都很简单,你是否这么认为呢?
使用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
(
int1 number,
int2 number
) return number
DETERMINISTIC
AS LANGUAGE JAVA
NAME 'BitOper.bitAnd(int, int) return int';
/
create or replace function bit_or
(
int1 number,
int2 number
) return number
DETERMINISTIC
AS LANGUAGE JAVA
NAME 'BitOper.bitOr(int, int) return int';
/
create or replace function bit_xor
(
int1 number,
int2 number
) return number
DETERMINISTIC
AS LANGUAGE JAVA
NAME 'BitOper.bitXor(int, int) return int';
/
create or replace function bit_not
(
int1 number
) 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
看起来一切都很简单,你是否这么认为呢?
展开全部
是PLSQL的问题,和java没有关系,是你运行sql错误 。和&没有关系吧,看看sql中的每个值的取数、赋值是否正确。
追问
PLSQL中的&会要你输入值,
这段代码直接拖到PLSQL能直接编译通过,而且能正常执行,
但是现在要求在lunix下启动SQLPLUS编译就会出这个问题
追答
是不是运行方式问题:一个是oracle命令方式、一个是sql方式的原因。
@sql文件名是命令方式运行的,是不是不支持,先写一个简单的测试一下看看。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询