java调用oracle存储过程

在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器。在数据库系统中无论是存储过程还是触发器,都是通过SQL 语句和控制流程语句的集合来完成的。相对来说,数据库系统中的触发器也是一种存储过程。存储过程在数据库中运算时自动生成各种执行方式,因此,大大提高了对其运行时的执行速度。在大型数据库系统如Oracle、SQL Server中都不仅提供了用户自定义存储过程的功能,同时也提供了许多可作为工具进行调用的系统自带存储过程。
所谓存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL 语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。
由于J2EE体系一般建立大型的企业级应用系统,而一般都配备大型数据库系统如Oracle或者SQL Server,在本文《JAVA与Oracle存储过程》中将介绍JAVA跟Oracle存储过程之间的相互应用跟相互间的各种调用。
一、JAVA调用Oracle存储过程
JAVA跟Oracle之间最常用的是JAVA调用Oracle的存储过程,以下简要说明下JAVA如何对Oracle存储过程进行调用。
Ⅰ、不带输出参数情况
过程名称为pro1,参数个数1个,数据类型为整形数据

java调用oracle存储过程import java.sql.* ;
java调用oracle存储过程public class ProcedureNoArgs
{
java调用oracle存储过程public static voidmain(Stringargs[]) throws Exception
java调用oracle存储过程{
java调用oracle存储过程// 加载Oracle驱动
java调用oracle存储过程DriverManager.registerDriver( new oracle.jdbc.driver.OracleDriver());
java调用oracle存储过程// 获得Oracle数据库连接
java调用oracle存储过程Connectionconn =DriverManager.getConnection( " jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd" );
java调用oracle存储过程
java调用oracle存储过程// 创建存储过程的对象
java调用oracle存储过程CallableStatementc = conn.divpareCall( " {callpro1(?)} " );
java调用oracle存储过程
java调用oracle存储过程// 给Oracle存储过程的参数设置值,将第一个参数的值设置成188
java调用oracle存储过程c.setInt( 1 , 188);
java调用oracle存储过程
java调用oracle存储过程// 执行Oracle存储过程
java调用oracle存储过程c.execute();
java调用oracle存储过程conn.close();
java调用oracle存储过程}
java调用oracle存储过程}
java调用oracle存储过程


Ⅱ、带输出参数的情况
过程名称为pro2,参数个数2个,数据类型为整形数据,返回值为整形类型

java调用oracle存储过程importjava.sql.*;
java调用oracle存储过程publicclassProcedureWithArgs
{
java调用oracle存储过程publicstaticvoidmain(Stringargs[])throwsException
java调用oracle存储过程{
java调用oracle存储过程//加载Oracle驱动
java调用oracle存储过程DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());
java调用oracle存储过程//获得Oracle数据库连接
java调用oracle存储过程Connectionconn =DriverManager.getConnection("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd");
java调用oracle存储过程
java调用oracle存储过程//创建Oracle存储过程的对象,调用存储过程
java调用oracle存储过程CallableStatementc=conn.divpareCall("{callpro2(?,?)}");
java调用oracle存储过程
java调用oracle存储过程//给Oracle存储过程的参数设置值,将第一个参数的值设置成188
java调用oracle存储过程c.setInt(1,188);
java调用oracle存储过程//注册存储过程的第二个参数
c.registerOutParameter(2,java.sql.Types.INTEGER);java调用oracle存储过程//执行Oracle存储过程
java调用oracle存储过程c.execute();
//得到存储过程的输出参数值并打印出来
System.out.println (c.getInt(2));
java调用oracle存储过程conn.close();
java调用oracle存储过程}
java调用oracle存储过程}

Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。

Oracle存储过程可以有无参数存储过程和带参数存储过程。
、无参程序过程语法

1createorreplaceprocedureNoParPro
2asjava调用oracle存储过程;
3begin
4java调用oracle存储过程;
5exception //存储过程异常
6java调用oracle存储过程;
7end;
8


二、带参存储过程实例

1createorreplaceprocedurequeryempname(sfindnoemp.empno%type)as
2sNameemp.ename%type;
3sjobemp.job%type;
4begin
5 ....
7exception
....
14end;
15


三、 带参数存储过程含赋值方式

1createorreplaceprocedurerunbyparmeters(isalinemp.sal%type,
snameoutvarchar,sjobinoutvarchar)
2asicountnumber;
3begin
4selectcount(*)intoicountfromempwheresal>isalandjob=sjob;
5ificount=1then
6 ....
9else
10 ....
12endif;
13exception
14whentoo_many_rowsthen
15DBMS_OUTPUT.PUT_LINE('返回值多于1行');
16whenothersthen
17DBMS_OUTPUT.PUT_LINE('在RUNBYPARMETERS过程中出错!');
18end;
19


四、在Oracle中对存储过程的调用
过程调用方式一

1declare
2realsalemp.sal%type;
3realnamevarchar(40);
4realjobvarchar(40);
5begin //存储过程调用开始
6realsal:=1100;
7realname:='';
8realjob:='CLERK';
9runbyparmeters(realsal,realname,realjob); --必须按顺序
10DBMS_OUTPUT.PUT_LINE(REALNAME||''||REALJOB);
11END; //过程调用结束
12


过程调用方式二
1declare
2realsalemp.sal%type;
3realnamevarchar(40);
4realjobvarchar(40);
5begin//过程调用开始
6realsal:=1100;
7realname:='';
8realjob:='CLERK';
9runbyparmeters(sname=>realname,isal=>realsal,sjob=>realjob); --指定值对应变量顺序可变
10DBMS_OUTPUT.PUT_LINE(REALNAME||''||REALJOB);
11END; //过程调用结束

相关推荐