JAVA与Oracle存储过程(二)

在前一篇文章中简单介绍了JAVA程序如何调用Oracle存储过程的基本语法程序结构, 本文将介绍JAVA跟Oracle的另一种关系,即通过JAVA编写Oracle存储过程。 通常情况下,我们都是使用Oracle数据库系统中的ps/sql语句来为oracle编写各种存储过程,不过,在Oracle的第八个版本8之后,为我们提供了编写存储过程的另一种新的选择,那就是使用JAVA来编写Oracle存储过程。从Oracle8.0版本开始,在Oracle数据库系统中自带了java虚拟机jvm,因此使得Oracle内置了对JAVA的全面支持,我们在使用JAVA可以实现的任何功能现在都可以放到Oracle中来实现,当然我们也可以在oracle中来操作其他数据库。JAVA的加入让Oracle展能力得到了升华,我们可以定义一个触发器来在进行任何数据库操作的时候对外界进行其他操作的功能。

下面准备举个例子来说明下如何通过JAVA来创建Oracle存储过程,例子不在于有多高级,功能不在于多完善,我想,如果能从一个简单例子,引申出去,去繁衍更多的方法,去实现更多你自己需要的功能,这才是简单例子的作用。所以,认为我写的简单,写的肤浅的人你可以不用看,但是我写出来就是为了让任何有JAVA基础的人都能容易懂得,而从简单的例子去构造出其他的应用。个人认为,中国软件界更需要有的程序员素质,就是能更多帮助那些初学者,让他们少走弯路,才能让我国的IT行业有更好的发展,对那些将初学者的问题拒之千里之外的程序员的做法,在此表示遗憾....

当然,以上是题外话,但是希望能引起大家的思考,,,,能引起在我博客话我发的内容简单的人的反思。。。

二、使用JAVA创建Oracle存储过程

先看下如何使用JAVA来编写Oracle存储过程,我们在Oracle的sql plus中编写语句。

Ⅰ、启动SQL PLUS

Ⅱ、编写JAVA类,定义JAVA类别名,本存储过程为简单地输出传入参数的平方值。

 create or replace and compile java source named "PF" as
/**
*通过JAVA类来 创建Oracle存储过程
*
**/
package org.oraclejava.pro;
public  class javaCreatePro
{
 public  static  String test( int num)
{
  return num+ "的平方为: " +num*num;
}
}

Ⅲ、将JAVA类中的方法test创建为一个Oracle函数方法

create or replace function PF_FUN(name integer) return varchar2 as language java name 'org.oraclejava.pro.javaCreatePro.test(java.lang.Integer) return java.lang.String';

Ⅳ、在控制台直接调用创建的Oracle函数

select PF_FUN(10) from dual;

Ⅴ、输出结果

10的平方为:100

以上即是在Oracle中的SQL PLUS中使用JAVA程序来产生Oracle存储过程的演示例子,演示了其基本语法的实现跟简单的功能实现,可以看出在JAVA跟Oracle之间存在很多有趣的用法,因为oracle中有java虚拟机,使得Oracle变得更加有趣更加丰富多彩。

时间: 2025-01-30 04:08:21

JAVA与Oracle存储过程(二)的相关文章

JAVA与Oracle存储过程(一)

在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器.在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的.相对来说,数据库系统中的触发器也是一种存储过程.存储过程在数据库中运算时自动生成各种执行方式,因此,大大提高了对其运行时的执行速度.在大型数据库系统如Oracle.SQL Server中都不仅提供了用户自定义存储过程的功能,同时也提供了许多可作为工具进行调用的系统自带存储过程. 所谓存储过程(Stored Procedure),就是一组用于

weblogic连接池-Java调用Oracle存储过程传入数组参数报错

问题描述 Java调用Oracle存储过程传入数组参数报错 weblogic连接池 JNDI提供的链接保存 Oracle数组 报错 oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection oracle.jdbc.driver.T4CConnection cannot be cast to oracle.jdbc.OracleConnection 大家好,我在用weblogic连接池 JNDI

java存储过程-java调用oracle存储过程到execute()就卡住了?

问题描述 java调用oracle存储过程到execute()就卡住了? debug看了一下就是走到execute()这就卡住了,是偶尔才发生这样的状况,一般这样的情况等待10分钟左右就没有问题了,在execute()这就不会卡住了,很快就执行过去. 我感觉是系统中有很多用户都在做各种不同的操作占用了oracle的什么资源(我们这个系统中有不少操作都是用存储过程实现的),导致执行存储过程时,一直再等待这个资源,希望有大神能告诉我是什么原因导致的?谢谢 解决方案 java调用oracle存储过程用

Java调用Oracle存储过程实例教程

一 存储过程 首先,我们建立一个简单的表进行存储过程的测试  代码如下 复制代码 createtable xuesheng(id integer, xing_ming varchar2(25), yu_wen number, shu_xue number); insertinto xuesheng values(1,'zhangsan',80,90) insertinto xuesheng values(2,'lisi',85,87) 1)无返回值的存储过程  代码如下 复制代码 createo

java基础---->java调用oracle存储过程(转)

存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.今天,我们就开始学习java中调用oracle的存储过程.   java中调用oracle的存储过程 项目结构如下: 一. 在数据库创建存储过程的脚本,如果使用的是本地的oracle数据库,则需要开启服务:OracleOraDb11g_home1TNSListener和OracleServiceORCL

java调用oracle存储过程,返回类型record

问题描述 如题,如果在java中调用oracle的存储过程,但输出参数是record类型的,如何获得结果啊createorreplacepackagerecordpackistypestudent_typeisrecord(idnumber,namevarchar2(20));end; createorreplaceprocedurerecordPro(v_recordoutrecordpack.student_type)isbeginselectid,nameintov_recordfroms

java调用Oracle存储过程的方法实例_java

 1.测试添加数据的procedure 复制代码 代码如下: public void testProcedure() {        Connection con = getConnction();         // **1.测试添加数据的procedure          String procedure = "{call users_insert_proc(?,?,?,?) }";         CallableStatement cs = null;        tr

springMVC + oracle存储过程架构高性能java web架构

MVC让简单的业务也变得复杂 不知道你在使用MVC模式开发项目的时候是否觉得很麻烦,一个简单的增删改查动作却要涉及到多个文件操作. 以一条数据增加为例说明. 假设我们使用hibernate并且dao层是已经封装好的 从图中可以看出如果我们在系统中写一个增加功能需要自己动手写的地方至少是 jsp , action , service,servicesImpl 四层. 如果是复杂的添加操作那么我们很可能还会自己定义dao层的接口和方法,那样就是6层操作了. 如果使用mybatis 至少也是写4层,常

Java中CallableStatement调用Oracle存储过程总结

一.无返回值的存储过程调用 CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2)   AS      BEGIN          INSERT INTO DBO.EMP (ID,NAME) VALUES (PARA1, PARA2);   END PRO_1; import java.sql.*; import java.sql.ResultSet; public class CallProcedureTe