在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/SQL Developer 的功能远不如 SQL Developer,但它是用纯 JAVA 开发的 ORACLE 数据库管理工具,所以可以比较轻松的支持跨操作系统平台使用,可以在非 windows OS 上使用。由于 PL/SQL Developer 在 ...
PL/SQL的出现正是为了解决这一问题,PL/SQL是一种过程化语言,属于第三代语言,它与C、 C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。本文主要介绍PL/SQL的编程基础,以使入门者对PL/SQL...
PL/SQL有三种集合 联合数组 嵌套表 可变数组 联合数组详解: 什么是数组?数组有什么特点 数据是线性存放的,在内存中地址是连续的 可以用索引来访问 定义联合数组? 联合数组不需要定义长度,他能容纳的元素最大...
通过学习书中的代码和图例,您不仅能访问和修改数据库信息,编写功能强大的PL/SQL 语句,执行有效的查询和部署稳固的安全性,还能轻松实现C、C++ 和Java 过程,建立可启用Web 的数据库,缩短开发时间和优化性能。...
结构化查询语言(Structured Query Language,简称...PL/SQL 的出现正是为了解决这一问题,PL/SQL 是一种过程化语言,属于第三代语言,它与 C,C++,Java 等语言一样关注于处理细节,因此可以用来实现比较复杂的业务逻辑。
5. SQL与PL/SQL的区别 SQL:1) 第四代语言(智能语言); 2) 做什么,不管怎么做; 3) 缺少过程与控制语句; 4) 无算法 PL/SQL: (相对SQL扩展部分) 1) 扩展变量和类型; 2) 扩展控制结构; 3) 扩展过程与函数...
plsql入门 游标变量 Oracle EXTRACT()函数 用Java调用存储过程 ORACLE用户常用数据字典的查询使用方法
PL/SQL也是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL就是把数据操作和查询语句组织在PL/SQL代码...
PL/SQL的学习教程资料,由Java私塾制作,配套视频由私塾在线提供. 系统学习PL/SQL的结构化编程(包括游标、异常、包、触发器、动态sql等);掌握使用jdbc调用存储过程。
像Java需要引入第三方的包,或者某些网页都要调用地方的URL来生成! 这样看起来挺麻烦的~ 实际上在oracle , 无须第三方的Jar包,也无需要第三方的二维码服务!直接call上面的pl/sql包就可以生成二维码了!
8. 创建与修改非 PL/SQL 对象............................................................................................................51 8.1 表定义编辑器.................................................
1、简单程序 2、限定查询 3、多表查询 4、子查询 5、分页查询 6、单行函数 7、oracle对象操作 8、oracle类型练习 9、java中调用oracle 10、procedure经典练习
使用Java来扩展存储程序是一种很流行的方法。在使用Java类库处理数据的过程中,PL/SQL是必不可少的一环,这是因为PL/SQL 封装了Java类库的数据访问,即任何Java存储对象访问的数据都必须经过PL/SQL。
通过学习书中的代码和图例,您不仅能访问和修改数据库信息,编写功能强大的PL/SQL 语句,执行有效的查询和部署稳固的安全性,还能轻松实现C、C++ 和Java 过程,建立可启用Web 的数据库,缩短开发时间和优化性能。...
PL/SQL的出现正是为了解决这一问题,PL/SQL是一种过程化语言,属于第三代语言,它与C、 C++、Java等语言一样关注于处理细节,可以用来实现比较复杂的业务逻辑。本文主要介绍PL/SQL的编程基础,以使入门者对PL/SQL...
它使开发者可以对PL/SQL存储程序单元和Java类进行编码和编译,可以使DBA检测到数据库内部构造的任何部分,并且通过上下页菜单和图形用户界面,执行任何ALTER命令。Hora提供了一种快速简易的方式进行读取、保存和执行...
PL/SQL 实用程序。 为 Oracle 10.2 编写和测试(应该适用于更高版本,某些部分也适用于早期版本)。 内容: 发布到公共领域。 p_admin 用于会话和作业控制的包。 如果作业一直在密集运行,则很难编译它们使用的源...
java调用ERP存储过程,调用存储过程很简单,重点在于存储过程的返回,本案例主要是返回自定义类型的返回,其中type的只支持Object类型的返回,其他PL/SQL类型的返回java暂时不支持