参考文档
《oracle 8i PL/SQL高级程序设计》机械工业出版社
在PL/SQL Developer下建立 PL/SQL调用 JAVA程序。
注意:
只有java类的类方法发布到oracle数据库中, 才能被PLSQL访问;这是因为所有的PLSQL
子程序/函数都是类方法。
当然java中的实例方法,也是可以加载oracle数据库中的,而且也可以在PLSQL子程序/函数
引用java中的实例方法,但是当实际使用这个方法的时候,数据库才会给出错误提示。
1下面是1个例子
1.1编写java代码
例如:
create or replace and compile java source named wdzjava as
public class wdzjava
{
public static String entry(String a )
{
return ""+a+"String";
}
}
然后在PL/SQL Developer下编译执行了。
1.2编写PL/SQL过程/函数对应的代码。
1.2.1参数说明需要全限定名
在PL/SQL过程/函数定义引用java类的类方法时,java方法的参数说明需要使用全限定名称。
例子:
create or replace function aaa(a varchar2) RETURN VARCHAR2 as
LANGUAGE JAVA NAME 'wdzjava.entry(java.lang.String) return java.lang.String';
注意上面的代码不可以定义为
create or replace function aaa(a varchar2) RETURN VARCHAR2 as
LANGUAGE JAVA NAME 'wdzjava.entry(String) return String';
注意:
1.2.2关于参数的 in ,out,nocopy 问题
当一个PL/SQL过程/函数的参数定义为含有out,nocop时候是不能引用java类的方法的。像下面的代码是不能通过编译的。如果要使用out或者in out ,需要PL/SQL过程/函数的out或者in out参数对应java类方法的数组参数。
create or replace function WdzJavaTest_test(p_str in out varchar2) return varchar2 as
language java name 'WdzJavaTest.test(java.lang.String) return java.lang.String';
1.2.3java方法中的数组参数
java方法中的数组参数和PL/SQL过程/函数的参数的对应可以采用重载的方式定义一个或者多个PL/SQL过程/函数和同1个java方法对应。只有main方法才可以定义数组形式,并且使用到PL/SQL过程/函数中去。对于其他java类方法的数组参数,需要PL/SQL过程/函数的out或者in out参数与之对应。
例如下面的例子。
1. java代码
create or replace and compile java source named WdzjavaTest as
public class WdzjavaTest
{
public static String test(String a )
{
a = a+"001";
return ""+a+"String";
}
public static String getAStr(String [] a){
int i=0;
String s="aaaaaa";
a[0] = a[0] +"sex";
s = s + a[0];
return s;
}
public static void main(String [] a){
int i=0;
String s="aaaaaa";
for (i=1;i==a.length;i++){
s = s+","+a[i-1];
}
System.out.println("s="+s);
}
}
2. 在包内定义若干函数/过程实现调用 java的带有数组参数的方法
注意下面的getAStr方法调用是不能成功的。
---在包内定义若干函数/过程实现调用 java的带有数组参数的方法
CREATE OR REPLACE PACKAGE Pkg_WdzJavaTest AS---在包内定义若干函数/过程实现调用 java的带有数组参数的方法
function test(p_Str varchar2) RETURN varchar2 IS
language java
name 'WdzjavaTest.test(java.lang.String) return java.lang.String';
function getAStr(p_Str varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStrwdz(p_Str in out varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
procedure main(p_Str varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[])';
procedure main(p_Str varchar2,p_Str2 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
procedure main(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
END ;
3.测试
declare
s varchar2(100);
s2 varchar2(100);
begin
s := pkg_wdzjavatest.test('wdz test');
dbms_output.put_line(' pkg_wdzjavatest.test='||s);
pkg_wdzjavatest.main('test main(s)');
pkg_wdzjavatest.main('test main str1','test main str2');
pkg_wdzjavatest.main('test main str1','test main str2','test main str3');
--pkg_wdzjavatest.getAStr('test main(s)'); 不能使用
--pkg_wdzjavatest.getAStr('test main str1','test main str2'); 不能使用
s2 := 'aaa';
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String value='||s2);
s := pkg_wdzjavatest.getAStrwdz(s2);
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String return value='||s2||',result='||s);
end;
1.2.4使用PL/SQL过程去调用java类函数方法
---定义一个java类函数
create or replace and compile java source named JReturn as
class JReturn
{
// Simply returns its parameter.
static public String theFunc(String p,String [] sss)
{
sss[0]= p;
return p;
}
}
--使用PL/SQL过程去调用java类函数方法(带有返回参数值)
create or replace procedure JReturn2(p_Parameter IN VARCHAR2,p_sss out varchar2)
AS
LANGUAGE JAVA
NAME 'JReturn.theFunc(java.lang.String,java.lang.String[])';
--测试调用java类的函数(带返回结果的类方法)
declare
a varchar2(200):='aaaaa';
b varchar2(200) := 'xxx';
begin
jreturn2(a,b);
dbms_output.put_line(b);
end;
2在dos环境下加载一个类文件到oralce数据库
把e:DateUtilsWDZ.java文件加载到数据库
在dos环境输入(注意loadjava是oracle的带的一个java加载工具)下面的命令。
loadjava -user apple/apple@wdzdb -resolve -v e:DateUtilsWDZ.java
说明:
数据库用户名称= apple
密码= apple
Oracle tns 名称= wdzdb
3需要了解java和oracle数据类型的对照关系
类别
PL/SQL类型
Java类型
日期
date
oracle.sql.Date,java.sql.Date,
Java.sql.Timestamp
blob
Blob
oracle.sql.Blob,oracle.jdbc2.Blob
clob
clob
oracle.sql.Clob, oracle.jdbc2.Clob
对象
Object
Oracle.sql.Struct, oracle.jdbc2.Struct
集合
Array,Table
Oracle.sql.Array, oracle.jdbc2. Array
1.1编写java代码
例如:
create or replace and compile java source named wdzjava as
public class wdzjava
{
public static String entry(String a )
{
return ""+a+"String";
}
}
然后在PL/SQL Developer下编译执行了。
1.2编写PL/SQL过程/函数对应的代码。
1.2.1参数说明需要全限定名
在PL/SQL过程/函数定义引用java类的类方法时,java方法的参数说明需要使用全限定名称。
例子:
create or replace function aaa(a varchar2) RETURN VARCHAR2 as
LANGUAGE JAVA NAME 'wdzjava.entry(java.lang.String) return java.lang.String';
注意上面的代码不可以定义为
create or replace function aaa(a varchar2) RETURN VARCHAR2 as
LANGUAGE JAVA NAME 'wdzjava.entry(String) return String';
注意:
1.2.2关于参数的 in ,out,nocopy 问题
当一个PL/SQL过程/函数的参数定义为含有out,nocop时候是不能引用java类的方法的。像下面的代码是不能通过编译的。如果要使用out或者in out ,需要PL/SQL过程/函数的out或者in out参数对应java类方法的数组参数。
create or replace function WdzJavaTest_test(p_str in out varchar2) return varchar2 as
language java name 'WdzJavaTest.test(java.lang.String) return java.lang.String';
1.2.3java方法中的数组参数
java方法中的数组参数和PL/SQL过程/函数的参数的对应可以采用重载的方式定义一个或者多个PL/SQL过程/函数和同1个java方法对应。只有main方法才可以定义数组形式,并且使用到PL/SQL过程/函数中去。对于其他java类方法的数组参数,需要PL/SQL过程/函数的out或者in out参数与之对应。
例如下面的例子。
1. java代码
create or replace and compile java source named WdzjavaTest as
public class WdzjavaTest
{
public static String test(String a )
{
a = a+"001";
return ""+a+"String";
}
public static String getAStr(String [] a){
int i=0;
String s="aaaaaa";
a[0] = a[0] +"sex";
s = s + a[0];
return s;
}
public static void main(String [] a){
int i=0;
String s="aaaaaa";
for (i=1;i==a.length;i++){
s = s+","+a[i-1];
}
System.out.println("s="+s);
}
}
2. 在包内定义若干函数/过程实现调用 java的带有数组参数的方法
注意下面的getAStr方法调用是不能成功的。
---在包内定义若干函数/过程实现调用 java的带有数组参数的方法
CREATE OR REPLACE PACKAGE Pkg_WdzJavaTest AS---在包内定义若干函数/过程实现调用 java的带有数组参数的方法
function test(p_Str varchar2) RETURN varchar2 IS
language java
name 'WdzjavaTest.test(java.lang.String) return java.lang.String';
function getAStr(p_Str varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStrwdz(p_Str in out varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
procedure main(p_Str varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[])';
procedure main(p_Str varchar2,p_Str2 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
procedure main(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
END ;
3.测试
declare
s varchar2(100);
s2 varchar2(100);
begin
s := pkg_wdzjavatest.test('wdz test');
dbms_output.put_line(' pkg_wdzjavatest.test='||s);
pkg_wdzjavatest.main('test main(s)');
pkg_wdzjavatest.main('test main str1','test main str2');
pkg_wdzjavatest.main('test main str1','test main str2','test main str3');
--pkg_wdzjavatest.getAStr('test main(s)'); 不能使用
--pkg_wdzjavatest.getAStr('test main str1','test main str2'); 不能使用
s2 := 'aaa';
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String value='||s2);
s := pkg_wdzjavatest.getAStrwdz(s2);
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String return value='||s2||',result='||s);
end;
1.2.4使用PL/SQL过程去调用java类函数方法
---定义一个java类函数
create or replace and compile java source named JReturn as
class JReturn
{
// Simply returns its parameter.
static public String theFunc(String p,String [] sss)
{
sss[0]= p;
return p;
}
}
--使用PL/SQL过程去调用java类函数方法(带有返回参数值)
create or replace procedure JReturn2(p_Parameter IN VARCHAR2,p_sss out varchar2)
AS
LANGUAGE JAVA
NAME 'JReturn.theFunc(java.lang.String,java.lang.String[])';
--测试调用java类的函数(带返回结果的类方法)
declare
a varchar2(200):='aaaaa';
b varchar2(200) := 'xxx';
begin
jreturn2(a,b);
dbms_output.put_line(b);
end;
2在dos环境下加载一个类文件到oralce数据库
把e:DateUtilsWDZ.java文件加载到数据库
在dos环境输入(注意loadjava是oracle的带的一个java加载工具)下面的命令。
loadjava -user apple/apple@wdzdb -resolve -v e:DateUtilsWDZ.java
说明:
数据库用户名称= apple
密码= apple
Oracle tns 名称= wdzdb
3需要了解java和oracle数据类型的对照关系
类别
PL/SQL类型
Java类型
日期
date
oracle.sql.Date,java.sql.Date,
Java.sql.Timestamp
blob
Blob
oracle.sql.Blob,oracle.jdbc2.Blob
clob
clob
oracle.sql.Clob, oracle.jdbc2.Clob
对象
Object
Oracle.sql.Struct, oracle.jdbc2.Struct
集合
Array,Table
Oracle.sql.Array, oracle.jdbc2. Array
public class wdzjava
{
public static String entry(String a )
{
return ""+a+"String";
}
}
1.2.1参数说明需要全限定名
在PL/SQL过程/函数定义引用java类的类方法时,java方法的参数说明需要使用全限定名称。
例子:
create or replace function aaa(a varchar2) RETURN VARCHAR2 as
LANGUAGE JAVA NAME 'wdzjava.entry(java.lang.String) return java.lang.String';
注意上面的代码不可以定义为
create or replace function aaa(a varchar2) RETURN VARCHAR2 as
LANGUAGE JAVA NAME 'wdzjava.entry(String) return String';
注意:
1.2.2关于参数的 in ,out,nocopy 问题
当一个PL/SQL过程/函数的参数定义为含有out,nocop时候是不能引用java类的方法的。像下面的代码是不能通过编译的。如果要使用out或者in out ,需要PL/SQL过程/函数的out或者in out参数对应java类方法的数组参数。
create or replace function WdzJavaTest_test(p_str in out varchar2) return varchar2 as
language java name 'WdzJavaTest.test(java.lang.String) return java.lang.String';
1.2.3java方法中的数组参数
java方法中的数组参数和PL/SQL过程/函数的参数的对应可以采用重载的方式定义一个或者多个PL/SQL过程/函数和同1个java方法对应。只有main方法才可以定义数组形式,并且使用到PL/SQL过程/函数中去。对于其他java类方法的数组参数,需要PL/SQL过程/函数的out或者in out参数与之对应。
例如下面的例子。
1. java代码
create or replace and compile java source named WdzjavaTest as
public class WdzjavaTest
{
public static String test(String a )
{
a = a+"001";
return ""+a+"String";
}
public static String getAStr(String [] a){
int i=0;
String s="aaaaaa";
a[0] = a[0] +"sex";
s = s + a[0];
return s;
}
public static void main(String [] a){
int i=0;
String s="aaaaaa";
for (i=1;i==a.length;i++){
s = s+","+a[i-1];
}
System.out.println("s="+s);
}
}
2. 在包内定义若干函数/过程实现调用 java的带有数组参数的方法
注意下面的getAStr方法调用是不能成功的。
---在包内定义若干函数/过程实现调用 java的带有数组参数的方法
CREATE OR REPLACE PACKAGE Pkg_WdzJavaTest AS---在包内定义若干函数/过程实现调用 java的带有数组参数的方法
function test(p_Str varchar2) RETURN varchar2 IS
language java
name 'WdzjavaTest.test(java.lang.String) return java.lang.String';
function getAStr(p_Str varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStrwdz(p_Str in out varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
procedure main(p_Str varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[])';
procedure main(p_Str varchar2,p_Str2 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
procedure main(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
END ;
3.测试
declare
s varchar2(100);
s2 varchar2(100);
begin
s := pkg_wdzjavatest.test('wdz test');
dbms_output.put_line(' pkg_wdzjavatest.test='||s);
pkg_wdzjavatest.main('test main(s)');
pkg_wdzjavatest.main('test main str1','test main str2');
pkg_wdzjavatest.main('test main str1','test main str2','test main str3');
--pkg_wdzjavatest.getAStr('test main(s)'); 不能使用
--pkg_wdzjavatest.getAStr('test main str1','test main str2'); 不能使用
s2 := 'aaa';
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String value='||s2);
s := pkg_wdzjavatest.getAStrwdz(s2);
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String return value='||s2||',result='||s);
end;
1.2.4使用PL/SQL过程去调用java类函数方法
---定义一个java类函数
create or replace and compile java source named JReturn as
class JReturn
{
// Simply returns its parameter.
static public String theFunc(String p,String [] sss)
{
sss[0]= p;
return p;
}
}
--使用PL/SQL过程去调用java类函数方法(带有返回参数值)
create or replace procedure JReturn2(p_Parameter IN VARCHAR2,p_sss out varchar2)
AS
LANGUAGE JAVA
NAME 'JReturn.theFunc(java.lang.String,java.lang.String[])';
--测试调用java类的函数(带返回结果的类方法)
declare
a varchar2(200):='aaaaa';
b varchar2(200) := 'xxx';
begin
jreturn2(a,b);
dbms_output.put_line(b);
end;
2在dos环境下加载一个类文件到oralce数据库
把e:DateUtilsWDZ.java文件加载到数据库
在dos环境输入(注意loadjava是oracle的带的一个java加载工具)下面的命令。
loadjava -user apple/apple@wdzdb -resolve -v e:DateUtilsWDZ.java
说明:
数据库用户名称= apple
密码= apple
Oracle tns 名称= wdzdb
3需要了解java和oracle数据类型的对照关系
类别
PL/SQL类型
Java类型
日期
date
oracle.sql.Date,java.sql.Date,
Java.sql.Timestamp
blob
Blob
oracle.sql.Blob,oracle.jdbc2.Blob
clob
clob
oracle.sql.Clob, oracle.jdbc2.Clob
对象
Object
Oracle.sql.Struct, oracle.jdbc2.Struct
集合
Array,Table
Oracle.sql.Array, oracle.jdbc2. Array
LANGUAGE JAVA NAME 'wdzjava.entry(java.lang.String) return java.lang.String';
LANGUAGE JAVA NAME 'wdzjava.entry(String) return String';
当一个PL/SQL过程/函数的参数定义为含有out,nocop时候是不能引用java类的方法的。像下面的代码是不能通过编译的。如果要使用out或者in out ,需要PL/SQL过程/函数的out或者in out参数对应java类方法的数组参数。
create or replace function WdzJavaTest_test(p_str in out varchar2) return varchar2 as
language java name 'WdzJavaTest.test(java.lang.String) return java.lang.String';
1.2.3java方法中的数组参数
java方法中的数组参数和PL/SQL过程/函数的参数的对应可以采用重载的方式定义一个或者多个PL/SQL过程/函数和同1个java方法对应。只有main方法才可以定义数组形式,并且使用到PL/SQL过程/函数中去。对于其他java类方法的数组参数,需要PL/SQL过程/函数的out或者in out参数与之对应。
例如下面的例子。
1. java代码
create or replace and compile java source named WdzjavaTest as
public class WdzjavaTest
{
public static String test(String a )
{
a = a+"001";
return ""+a+"String";
}
public static String getAStr(String [] a){
int i=0;
String s="aaaaaa";
a[0] = a[0] +"sex";
s = s + a[0];
return s;
}
public static void main(String [] a){
int i=0;
String s="aaaaaa";
for (i=1;i==a.length;i++){
s = s+","+a[i-1];
}
System.out.println("s="+s);
}
}
2. 在包内定义若干函数/过程实现调用 java的带有数组参数的方法
注意下面的getAStr方法调用是不能成功的。
---在包内定义若干函数/过程实现调用 java的带有数组参数的方法
CREATE OR REPLACE PACKAGE Pkg_WdzJavaTest AS---在包内定义若干函数/过程实现调用 java的带有数组参数的方法
function test(p_Str varchar2) RETURN varchar2 IS
language java
name 'WdzjavaTest.test(java.lang.String) return java.lang.String';
function getAStr(p_Str varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStrwdz(p_Str in out varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
procedure main(p_Str varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[])';
procedure main(p_Str varchar2,p_Str2 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
procedure main(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
END ;
3.测试
declare
s varchar2(100);
s2 varchar2(100);
begin
s := pkg_wdzjavatest.test('wdz test');
dbms_output.put_line(' pkg_wdzjavatest.test='||s);
pkg_wdzjavatest.main('test main(s)');
pkg_wdzjavatest.main('test main str1','test main str2');
pkg_wdzjavatest.main('test main str1','test main str2','test main str3');
--pkg_wdzjavatest.getAStr('test main(s)'); 不能使用
--pkg_wdzjavatest.getAStr('test main str1','test main str2'); 不能使用
s2 := 'aaa';
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String value='||s2);
s := pkg_wdzjavatest.getAStrwdz(s2);
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String return value='||s2||',result='||s);
end;
1.2.4使用PL/SQL过程去调用java类函数方法
---定义一个java类函数
create or replace and compile java source named JReturn as
class JReturn
{
// Simply returns its parameter.
static public String theFunc(String p,String [] sss)
{
sss[0]= p;
return p;
}
}
--使用PL/SQL过程去调用java类函数方法(带有返回参数值)
create or replace procedure JReturn2(p_Parameter IN VARCHAR2,p_sss out varchar2)
AS
LANGUAGE JAVA
NAME 'JReturn.theFunc(java.lang.String,java.lang.String[])';
--测试调用java类的函数(带返回结果的类方法)
declare
a varchar2(200):='aaaaa';
b varchar2(200) := 'xxx';
begin
jreturn2(a,b);
dbms_output.put_line(b);
end;
2在dos环境下加载一个类文件到oralce数据库
把e:DateUtilsWDZ.java文件加载到数据库
在dos环境输入(注意loadjava是oracle的带的一个java加载工具)下面的命令。
loadjava -user apple/apple@wdzdb -resolve -v e:DateUtilsWDZ.java
说明:
数据库用户名称= apple
密码= apple
Oracle tns 名称= wdzdb
3需要了解java和oracle数据类型的对照关系
类别
PL/SQL类型
Java类型
日期
date
oracle.sql.Date,java.sql.Date,
Java.sql.Timestamp
blob
Blob
oracle.sql.Blob,oracle.jdbc2.Blob
clob
clob
oracle.sql.Clob, oracle.jdbc2.Clob
对象
Object
Oracle.sql.Struct, oracle.jdbc2.Struct
集合
Array,Table
Oracle.sql.Array, oracle.jdbc2. Array
public class WdzjavaTest
{
public static String test(String a )
{
a = a+"001";
return ""+a+"String";
}
public static String getAStr(String [] a){
int i=0;
String s="aaaaaa";
a[0] = a[0] +"sex";
s = s + a[0];
return s;
}
public static void main(String [] a){
int i=0;
String s="aaaaaa";
for (i=1;i==a.length;i++){
s = s+","+a[i-1];
}
System.out.println("s="+s);
}
}
CREATE OR REPLACE PACKAGE Pkg_WdzJavaTest AS---在包内定义若干函数/过程实现调用 java的带有数组参数的方法
function test(p_Str varchar2) RETURN varchar2 IS
language java
name 'WdzjavaTest.test(java.lang.String) return java.lang.String';
function getAStr(p_Str varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStr(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
function getAStrwdz(p_Str in out varchar2) return varchar2 IS
language java
name 'WdzjavaTest.getAStr(java.lang.String[]) return java.lang.String';
procedure main(p_Str varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[])';
procedure main(p_Str varchar2,p_Str2 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
procedure main(p_Str varchar2,p_Str2 varchar2,p_Str3 varchar2) IS
language java
name 'WdzjavaTest.main(java.lang.String[]) ';
END ;
s varchar2(100);
s2 varchar2(100);
begin
s := pkg_wdzjavatest.test('wdz test');
dbms_output.put_line(' pkg_wdzjavatest.test='||s);
pkg_wdzjavatest.main('test main(s)');
pkg_wdzjavatest.main('test main str1','test main str2');
pkg_wdzjavatest.main('test main str1','test main str2','test main str3');
--pkg_wdzjavatest.getAStr('test main str1','test main str2'); 不能使用
s2 := 'aaa';
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String value='||s2);
s := pkg_wdzjavatest.getAStrwdz(s2);
dbms_output.put_line(' pkg_wdzjavatest.getAStrwdz input String return value='||s2||',result='||s);
end;
---定义一个java类函数
create or replace and compile java source named JReturn as
class JReturn
{
// Simply returns its parameter.
static public String theFunc(String p,String [] sss)
{
sss[0]= p;
return p;
}
}
--使用PL/SQL过程去调用java类函数方法(带有返回参数值)
create or replace procedure JReturn2(p_Parameter IN VARCHAR2,p_sss out varchar2)
AS
LANGUAGE JAVA
NAME 'JReturn.theFunc(java.lang.String,java.lang.String[])';
--测试调用java类的函数(带返回结果的类方法)
declare
a varchar2(200):='aaaaa';
b varchar2(200) := 'xxx';
begin
jreturn2(a,b);
dbms_output.put_line(b);
end;
2在dos环境下加载一个类文件到oralce数据库
把e:DateUtilsWDZ.java文件加载到数据库
在dos环境输入(注意loadjava是oracle的带的一个java加载工具)下面的命令。
loadjava -user apple/apple@wdzdb -resolve -v e:DateUtilsWDZ.java
说明:
数据库用户名称= apple
密码= apple
Oracle tns 名称= wdzdb
3需要了解java和oracle数据类型的对照关系
类别
PL/SQL类型
Java类型
日期
date
oracle.sql.Date,java.sql.Date,
Java.sql.Timestamp
blob
Blob
oracle.sql.Blob,oracle.jdbc2.Blob
clob
clob
oracle.sql.Clob, oracle.jdbc2.Clob
对象
Object
Oracle.sql.Struct, oracle.jdbc2.Struct
集合
Array,Table
Oracle.sql.Array, oracle.jdbc2. Array
类别
PL/SQL类型
Java类型
日期
date
oracle.sql.Date,java.sql.Date,
Java.sql.Timestamp
blob
Blob
oracle.sql.Blob,oracle.jdbc2.Blob
clob
clob
oracle.sql.Clob, oracle.jdbc2.Clob
对象
Object
Oracle.sql.Struct, oracle.jdbc2.Struct
集合
Array,Table
Oracle.sql.Array, oracle.jdbc2. Array
其他参考:
http://www.diybl.com/course/7_databases/oracle/oraclejs/200838/103247.html