ITPub博客

首页 > Linux操作系统 > Linux操作系统 > JAVA存储过程(转)

JAVA存储过程(转)

原创 Linux操作系统 作者:zhouwf0726 时间:2019-02-09 21:57:07 0 删除 编辑
从Oracle8i起,Oracle就在数据库内部包含了JVM.在数据库中包含JVM可以使JAVA方法在数据库内部运行.
  JAVA存储过程实际上是一种方法,但是JAVA要求之一就是任何事物都必须属于某个类(即,必须是static方法).
  为了与数据库进行交互,JAVA方法需要取得某个连接.当方法在数据库内作为存储过程运行时,有两种方式实现此连接.
  
  DriverManager.defaultConnection();
  DriverManager.getConnection("jdbc:default:connection");

  第一种方法总是返回同一个Connection对象,而二个方法每次都返回新的对象.

  为了在数据库外面测试JAVA存储过程,需要使用Oracle JDBC在main()方法内取得一个连接.

  通过命令行:loadjava可以把JAVA源码,类或jar或zip文件装入数据库.如果装入的是源代码,在默认的情况下是不会编译这些源码,直到第一次调用时才编译.如果加上 -resolve选项,则立即进行编译.

  loadjava -resolve -user username/password javaFile.java

  也可以在调试成功的JAVA文件头部加入:
  CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaClassTest" AS  如下:
  CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "JavaClassTest" AS
  import java.sql.*;
  import oracle.jdbc.*;
  ...
  //JAVA类的主体
  ...
  
  然后在SQL PLUS里,或TOAD里直接运行.


  为了使用存储过程,需要创建调用规范,把参数和返回类型映射为PL/SQL类型,即发布存储过程.

  语法如下:
CREATE [OR REPLACE] FUNCTION funciton_name [(parameter_list)]
RETURN SQL_TYEP {AS | IS}
LANGUAGE JAVA
NAME 'class_name.method_name([full_java_type[,...]]) return full_java_type';

CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter_list)] {AS | IS}
LANGUAGE JAVA
NAME 'class_name.method_name([full_java_type[,...]])';

  之后,可以用:
  SELECT function_name(parm) FROM DUAL;
  的格式调用此函数.

  在JAVA中,OUT或IN OUT参数必须对应为数组类型,即一般是适当类型的单元素数组,如:

Java方法:
--------------------------------------------------------------
public static void myMethod(int GUID,String[] outName){
outName[0] = myMethod(GUID);
}

Oracle存储过程
--------------------------------------------------------------
CREATE OR REPLACE PROCEDURE JAVA_TEST2(I_GUID IN NUMBER,O_NAME OUT VARCHAR2) AS
LANGUAGE JAVA
NAME 'JavaClassTest.myMethod(int,java.lang.String[])';

--------------------------------------------------------------
SET SERVEROUT ON
DECLARE
OUTVAR VARCHAR2(200);
BEGIN
JAVA_TEST2(3493,OUTVAR);
DBMS_OUTPUT.PUT_LINE(OUTVAR);
END;


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/756652/viewspace-242212/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Java初探Oracle(转)
请登录后发表评论 登录
全部评论

注册时间:2006-02-22

  • 博文量
    458
  • 访问量
    416599