1,创建JAVA 外部例程:
1)编制java代码
2)将java代码加载数据库
3)创建一个把pl/sql参数映射到java参数的pl/sql包装来发布java外部例程
将java代码加载数据库:
方法一:
create [or replace] [and {resolve | compile} [noforce] java
{{source | resource} named [schema.] primary_name}|class [schema schema_name]]
[involver_rights_clause]
[resolve resolve_clause]
{as source_text using lob_clause}
{procedure | function} procedure_name [plsql_argument_list]
as language java [name extenal_name [(java_parameter_list)]]
其中 schema 是存储java对象的模式
Primary_name 是java源代码
方法二:该方法在操作系统的命令提示符下执行的
Loadjava [options] files
例如:loadjava –uer liyongjie/123456 –resolve Md5.java
注意被存储过程调用的方法体必须是静态的
例子:该例子是用来说明md5加密
首先编写java代码并编译:
import java.security.*;
import java.security.spec.*;
public class Md5
{
public final static String Md5(String s)
{
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
try
{
byte[] strTemp = s.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++)
{
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
catch (Exception e){
return null;
}
}
public static void main(String[] args)
{
System.out.print(Md5.Md5("XX"));
}
}
然后将java文件加载数据库,在加载数据库之前先创建一个指向java文件的目录
create or replace directory JAVA_DIR
as 'D:\BOOKS\Oracle\Oracle and Java';
再加载java文件:
create or replace and resolve java source
named MD5 using bfile(java_dir,'Md5.java') ;
再发布例程:
create or replace package md5 as
function f_md5(v_str in varchar2) return varchar2 is
language java name 'Md5.Md5(java.lang.String) return java.lang.String';
end md5;
最后调用测试:
declare
v_str varchar2(500);
begin
v_str := md5.f_md5('x');
dbms_output.put_line(v_str);
end ;