`
bjtale
  • 浏览: 28741 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

PL/SQL与Java程序互相调用

 
阅读更多

       在PL/SQL中,仍然可以调用Java程序定义的方法。需要注意的是,Java程序中定义的方法必须为static,并且需要通过PL/SQL过程或函数进行方法调用。

       对于简单的Java类,可以直接在PL/SQL中定义并通过oracle进行编译:

create or replace and compile java source named "JavaCase"
as
package com.test;
public class JavaCase {
  public static String getName(String name){
  
   return "This method returns:"+ name;
  }
}

       而稍微复杂的类则需要通过JDK自己编译,使用oracle提供的loadjava utility命令把已经编译完成的clas

 

s文件上传到数据库服务器上。对于已经上传的jar或者class文件,可以使用dropjava命令进行删除:

 

loadjava -user username/pass@ORACLE_SERVER {dir}\HelloWorld.class   

 

       编译完成之后,使用以下命令查看是否有错误:

SQL> show errors java source JavaCase;
没有错误。

       随后,创建可以调用Java方法的函数:

 

 

create or replace function JavaCase(v_name in varchar2)
return varchar2
as
language java name 'com.test.JavaCase.getName(java.lang.String) return java.lang.String';

        创建完毕之后,即可调用该函数来执行对应的Java程序方法:

SQL> select JavaCase('yanh') from dual;

JAVACASE('YANH')
------------------------------------------------------------------------
This method returns:yanh

        同样,使用Java程序也可以调用已经的PL/SQL程序片段;首先在PL/SQL中创建一个函数:

create or replace function searchEmp(no in number) return varchar2 is
  emp_record emp%rowtype;
  empInfo varchar2(600);
begin
  select * into emp_record from emp where empno=no;
  empInfo:='name:'||to_char(emp_record.ename)||', empno:'
                                                  ||to_char(emp_record.empno)||', job:'||to_char(emp_record.job);
  return(empInfo);
end searchEmp;

        该函数接收一个数值类型的参数,返回通过查询语句执行的员工信息字符串。将在Java程序中调用该函数:

package com.any.res;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Types;

/** 
 * @ClassName: ExecutePlSql 
 * @author Helen
 * @date 2015年8月3日 上午11:34:49  
 */

public class ExecutePlSql {
	private static String url="jdbc:oracle:thin:@localhost:1521:orcl";
	private static String user="scott";
	private static String password="tiger";
	public static void main(String[] args) {
		Connection conn = null;
		CallableStatement csmt = null;
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			conn = DriverManager.getConnection(url, user, password);
			csmt = conn.prepareCall("{? = call searchemp(?)}");
			csmt.registerOutParameter(1, Types.VARCHAR);
			csmt.setInt(2, 7788);
			csmt.execute();
			String retValue = csmt.getString(1);
			System.out.println(retValue);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally{
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if(csmt!=null){
				try {
					csmt.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

       以上方法执行后可得到如下输出:name:SCOTT, empno:7788, job:ANALYST.在调用过程时,具有同样的操作流程,关键API是CallableStatement,这个类允许向数据库发送call命令,执行对应的PL/SQL程序段。

 

分享到:
评论

相关推荐

    PL/SqlDeveloper汉化版

    虽然目前来看 PL/SQL Developer 的功能远不如 SQL Developer,但它是用纯 JAVA 开发的 ORACLE 数据库管理工具,所以可以比较轻松的支持跨操作系统平台使用,可以在非 windows OS 上使用。由于 PL/SQL Developer 在 ...

    Oracle PL/SQL语言入门

    PL/SQL的出现正是为了解决这一问题,PL/SQL是一种过程化语言,属于第三代语言,它与C、 C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。本文主要介绍PL/SQL的编程基础,以使入门者对PL/SQL...

    PL/SQL学习笔记

    PL/SQL有三种集合 联合数组 嵌套表 可变数组 联合数组详解: 什么是数组?数组有什么特点 数据是线性存放的,在内存中地址是连续的 可以用索引来访问 定义联合数组? 联合数组不需要定义长度,他能容纳的元素最大...

    Oracle.Database.11g.PL_SQL.Programming

    通过学习书中的代码和图例,您不仅能访问和修改数据库信息,编写功能强大的PL/SQL 语句,执行有效的查询和部署稳固的安全性,还能轻松实现C、C++ 和Java 过程,建立可启用Web 的数据库,缩短开发时间和优化性能。...

    PL/SQL学习语法及应用

    结构化查询语言(Structured Query Language,简称...PL/SQL 的出现正是为了解决这一问题,PL/SQL 是一种过程化语言,属于第三代语言,它与 C,C++,Java 等语言一样关注于处理细节,因此可以用来实现比较复杂的业务逻辑。

    PL/SQL 基础.doc

    5. SQL与PL/SQL的区别 SQL:1) 第四代语言(智能语言); 2) 做什么,不管怎么做; 3) 缺少过程与控制语句; 4) 无算法 PL/SQL: (相对SQL扩展部分) 1) 扩展变量和类型; 2) 扩展控制结构; 3) 扩展过程与函数...

    pl/sql入门教程

    plsql入门 游标变量 Oracle EXTRACT()函数 用Java调用存储过程 ORACLE用户常用数据字典的查询使用方法

    PL-SQL教程资料

    PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码...

    PL-SQL教程(私塾在线)视频配套学习资料

    PL/SQL的学习教程资料,由Java私塾制作,配套视频由私塾在线提供. 系统学习PL/SQL的结构化编程(包括游标、异常、包、触发器、动态sql等);掌握使用jdbc调用存储过程。

    Oracle APEX生成二维码,PL/SQL生成二维码,QRCODE

    像Java需要引入第三方的包,或者某些网页都要调用地方的URL来生成! 这样看起来挺麻烦的~ 实际上在oracle , 无须第三方的Jar包,也无需要第三方的二维码服务!直接call上面的pl/sql包就可以生成二维码了!

    pl/sql操作手册

    8. 创建与修改非 PL/SQL 对象............................................................................................................51 8.1 表定义编辑器.................................................

    oracle Pl/sql编程经典入门

    1、简单程序 2、限定查询 3、多表查询 4、子查询 5、分页查询 6、单行函数 7、oracle对象操作 8、oracle类型练习 9、java中调用oracle 10、procedure经典练习

    oracle调用java程序

    使用Java来扩展存储程序是一种很流行的方法。在使用Java类库处理数据的过程中,PL/SQL是必不可少的一环,这是因为PL/SQL 封装了Java类库的数据访问,即任何Java存储对象访问的数据都必须经过PL/SQL。

    Oracle11gPLSQLProgramming

    通过学习书中的代码和图例,您不仅能访问和修改数据库信息,编写功能强大的PL/SQL 语句,执行有效的查询和部署稳固的安全性,还能轻松实现C、C++ 和Java 过程,建立可启用Web 的数据库,缩短开发时间和优化性能。...

    PLSQLDeveloper下载

    PL/SQL的出现正是为了解决这一问题,PL/SQL是一种过程化语言,属于第三代语言,它与C、 C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。本文主要介绍PL/SQL的编程基础,以使入门者对PL/SQL...

    keep tool8(集成PLSQL含keygen)part1

    它使开发者可以对PL/SQL存储程序单元和Java类进行编码和编译,可以使DBA检测到数据库内部构造的任何部分,并且通过上下页菜单和图形用户界面,执行任何ALTER命令。Hora提供了一种快速简易的方式进行读取、保存和执行...

    99乘法表java源码-OracleDBUtils:适用于Oracle数据库的有用PL/SQL实用程序

    PL/SQL 实用程序。 为 Oracle 10.2 编写和测试(应该适用于更高版本,某些部分也适用于早期版本)。 内容: 发布到公共领域。 p_admin 用于会话和作业控制的包。 如果作业一直在密集运行,则很难编译它们使用的源...

    java调用自定义类型的存储过程并转化为Rest返回

    java调用ERP存储过程,调用存储过程很简单,重点在于存储过程的返回,本案例主要是返回自定义类型的返回,其中type的只支持Object类型的返回,其他PL/SQL类型的返回java暂时不支持

Global site tag (gtag.js) - Google Analytics