(简)Oracle存储过程调用java

      通常我们都使用PL/SQL为Oracle编写存储过程,通过JDBC调用,执行存储过程。从Oracle8开始我们可以有另一种选择:Oracle自带一个JVM,内置对Java的支持,任何Java能做的事情你都可以放到 Oracle里面来做。这让Oracle具备了极其巨大的扩展能力,只要你愿意,完全可以开发一个trigger,让它在适当的时候给管理员的msn发送一条即时消息。
      由于PL/SQL是过程化的语言,它基本上不具备多态的概念,供Oracle使用的Java方法必须申明为 static,所以在Oracle中你无法使用Java的动态特性,比如接口、反射等。不过这并不妨碍你用Java做爱做的事。

 一个简单的例子:

      首先是创建一个Java类,你可以用Jbuilder/Eclipse来编写,也可以直接在Oracle的控制台里面创建。前者不多说,看看后一种方式。
启动SQL plus,执行如下命令:

createor replace and compile java source named "hello_sp"as

packageorg.bromon.oracle;

publicclass Hello

{

  public static String say(String name)

  {

    return "你好,"+name;

  }

}

Java程序已创建。


       然后在Oracle中把这个类导入成为一个函数,执行命令:

create or replace function hello_sp(namevarchar2) return varchar2

as language java name 

'org.bromon.oracle.Hello.say(java.lang.String) return java.lang.String';

函数已创建。

现在可以调用该函数,执行:

select hello_sp('bromon') from dual;

v有一个需要注意的问题是,假如我们的java方法是没有参数的,比如:

public static String say()

  {

    return "你好”;

  }

函数名不应该有扩号:hello_sp,否则会报告函数有编译错误。


       如果你的Java类是在IDE里面编写的,那么只需要在oracle中加载编译过的class文件即可,方法是:

启动enterprise manage console,在“方案”下找到“源类型”,右击”Java类”,选择”加载Java“,选择对应的class文件即可。


创建java存储过程的方法:

1. 使用oracle的sql语句来创建:

使用create or replace and compile java source named“<name>” as
 后边跟上java源程序。要求类的方法必须是public static的,才能用于    存储过程。

Oracle存储过程调用java

SQL>

create or replace and compile java source named"javademo1“

 as

  importjava.sql.*;
public class JavaDemo1 {
    public static void main(String[] args)
    {
       System.out.println("hello,java                                     demo1");
     }
  }
  /

Java 已创建。

SQL> show errors java source "javademo1"

没有错误。

SQL>

create or replace procedure javademo1

     as
language java name ''JavaDemo1.main(java.lang.String[])'';
/

过程已创建。

SQL> set serveroutput on

SQL> call javademo1();

SQL> set serveroutput on size 5000
SQL> call dbms_java.set_output(5000);

调用完成。

SQL> execute javademo1;

hello, java demo1


2.使用外部class文件来装载创建
public class OracleJavaProc
{
    public static void main(String[] argv)
    {
        System.out.println("It''s a Java Oracleprocedure.");
    }
}
SQL> grant create any directory toscott;
授权成功。

SQL>conn scott/tiger

已连接。

SQL>createor replace directory test_diras ''d:\oracle'';

目录已创建。

SQL>

 create or replacejava class   using bfile(test_dir,

“OracleJavaProc.CLASS'')
   /

Java 已创建。

2.使用外部class文件来装载创建

SQL> create or replace procedure testjavaproc as language javaname ''OracleJavaProc.main(java.lang.String[])'';
  /

过程已创建。

SQL> call testjavaproc();

调用完成。

SQL> execute testjavaproc;

PL/SQL 过程已成功完成。

SQL> set serveroutput on size 5000
SQL> call dbms_java.set_output(5000);

调用完成。

SQL> execute testjavaproc;
It''s a Java Oracle procedure


你可能感兴趣的:(java,oracle,sql,String,存储,Class)