用Java编写Oracle存储过程

 

 

1 介绍

Oracle 里可以使用多种语言来编写存储过程,比如 Pro*C/C++,PL/SQL,COBOL,Oracle8i 开始支持用 Java 编写存储过程。

 

如果非要写存储过程的话,做为以 Java 谋生的我,首选用 Java 编写,用 PL/SQL 需要记忆很多的语法 (Pascal 类的语法 ) 和函数,远不如使用 Java/JDBC 这么轻车熟路。而且, DB2 等数据库都支持 Java 存储过程,所以不比为每一种数据学习一种编写存储过程的方法了。

 

Java 存储过程与一般的 JDBC 程序有所不同的是:

1. 有安全限制,毕竟是在 oracle 内部运行的,不允许访问操作系统的资源,如文件。

2. 获取数据库联接方式, connection = new OracleDriver().defaultConnection();

3.System.out,System.err,System.in 等输入输出有所不同。可以利用某些命令重定向。

 

2 例子

下面用Java 存储过程写一个例子。

2.1 JavaSource

plsqldeveloper 里,java source 里增加一个TestJava 类,

Java 代码

create or replace and compile java source named TestJava as

public class TestJava {

 

    public static void test(String xm) {

       System. out .println( " 姓名 :" +xm);

    }

   

    public static String message(String xm) {

       return "Hello, " + xm;

    }

 

}

create or replace and compile java source named TestJava1 as

public class TestJava1

{

  public static void test()

  {

   System.out.println("Hello");

  }

}

执行它,以保存并编译。

2.2 Procedure

1.TestPro

create or replace procedure TestPro(xm in varchar2 ) as language java name 'TestJava.test(java.lang.String)' ;

create or replace procedure testJava1 as language java name 'TestJava1.test()';

 

2.command window 里输入

SET SERVEROUTPUT ON;

CALL dbms_java.set_output(2000);  

以使 System.out 重定向到当前窗口 ;

command window 里输入, exec testpro(‘111’);

即可看到结果:

  姓名 :111

PL/SQL procedure successfully completed

 

 

2.3 Function

1.TestFuc

create or replace function TestFuc(xm in varchar2 ) return VARCHAR2 as language java name 'TestJava.message(java.lang.String) return java.lang.String' ;

 

2. 调用

Select testfuc(‘ 娃哈哈 ’) from dual;

显示结果 :

Hello, 娃哈哈

 

3 Oracle Socket 通信

3.1 授权

-- 授权 , 用户必须大写

exec dbms_java.grant_permission('TEST','SYS:java.util.PropertyPermission', '*', 'read,write' );

exec dbms_java.grant_permission('TEST','SYS:java.net.SocketPermission','*','connect,resolve');

 

3.2 数据库连接

/**

      * 数据库连接 ( 默认 )

      * @return Connection

      * @throws SQLException

      */

    public static Connection getConnection() throws SQLException {

       Connection con = null ;

       con = new OracleDriver().defaultConnection();

 

       return con;

    }

 

    /**

      * 数据库连接

      * @param driverClassName

      * @param url

      * @param user

      * @param password

      * @return Connection

      * @throws ClassNotFoundException

      * @throws SQLException

      */

    public static Connection getConnection(String driverClassName, String url, String user, String password) throws ClassNotFoundException, SQLException {

       Connection con = null ;

       Class.forName (driverClassName);

       Properties info = System.getProperties ();

       info.put( "user" , user);

       info.put( "password" , password);

       con = DriverManager .getConnection (url, info);

 

       return con;

    }

4 参考资料

Oracle® Database Java Developer's Guide

http://download-west.oracle.com/docs/cd/B19306_01/java.102/b14187/toc.htm

 

Sample:

http://www.oracle.com/technology/sample_code/tech/java/jsp/oracle9ijsp.html

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值