Oracle里可以使用多种语言来编写存储过程,比如Pro*C/C++,PL/SQL,COBOL,在Oracle8i开始支持用Java编写存储过程。用pl/sql写存储过程对很多人来说时比较陌生的,用自己熟悉的语言处理起来也比较方便。
用到用java编写存储过程,网络上的一些资料有些乱,在这简单的整理下使用过程,和注意的地方。
Java存储过程与一般的JDBC程序有所不同的
下面是一个简单的例子
第一步:在plsqldeveloper里,java source里增加一个TestJava1类,也可以直接从IDE中拷贝过来
create or replace and compile java source named HelloJava as import oracle.jdbc.OracleDriver; public class HelloJava{ public static void test(int m,float){ //Connection conn = new OracleDriver().defaultConnection(); // 或则Connection conn = DriverManager.getConnection("jdbc:default:connection:"); //其它部分和一般的JDBC程序一样就可以了 System.out.println("Hello"); } }
执行它,以保存并编译
第二步:增加一个procedure,在command window里执行如下命令:
create or replace procedure myTest(n number,m float) as language java name 'HelloJava.test(int,float)';
注意:必须写成float,不能写成java.lang.Float,String型应该写成java.lang.String
第三步:在command window里输入
SET SERVEROUTPUT ON; CALL dbms_java.set_output(2000);
以使System.out重定向到当前窗口;
第四步:
在command window里输入,exec myTest(1,1.0);
即可看到结果:
Hello
==============================分隔线===========================================
以下转载自:WPS2000的窝的博客
地址:http://hi.baidu.com/zhangsilly/blog/item/fa513438c731b62b96ddd8a4.html
这段时间一直是在和存储过程打交到,PL/SQL很好好强大,但Java其实也不慢(比起PHP)
Java编写存储过程:
获取连接 (Class.forname 可以省掉了)
Connection conn = new OracleDriver().defaultConnection();
或者
Connection conn = DriverManager.getConnection("jdbc:default:connection:");
其它部分和一般的JDBC程序一样就可以了
import java.sql.Connection; import java.sql.PreparedStatement; import oracle.jdbc.OracleDriver; /** *@author Zhangxinling */ public class PorcedureSample{ public static void sample(long number) throws SQLException{ Connection conn = new OracleDriver().defaultConnection(); conn.setAutoCommit(false); PreparedStatement ptmt = conn.prepareStatement("INSERT INTO test values(??)"); for(long i=0L;i<number;i++){ stmt.setLong(1,i); stmt.setString(2,"[email protected]"); stmt.executeUpdate(); } stmt.close(); } }
部署:
将编写好的Java源代码拷贝到服务器上(我本地是 JDK 1.6 u 12 的,编译的在Oracle 1.42 的JDK上一般来说是运行不了的,不过没试过直接使用编译好的 .class 文件),使用 oracle 自带的 jdk 编译:
E:\oracle\product\10.2.0\db_1\jdk\bin\javac -classpath E:\oracle\product\10.2.0\db_1\jdbc\lib\ojdbc14.jar PorcedureSample.java
打开 em(Enterprise Manager) ,点击 Schema 下的 Java Classes ,点击 Load Java 按钮, Schema 选择你要挂的Schema,这里我选择 TEST
Schema ,看看刚刚的那个 Class 状态是否是 Valid ,不是的话多compile几次
建存储过程:
然后 Search 这个
测试代码,参数均为 100000(10w),调用2次:
Java版:8.64秒、8.069秒
PL/SQL版:3.219秒、3.094秒
(以上结果来自于一台默认安装的 Windows XP 机器,未做任何优化)