700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Oracle存储过程创建及调用(转)

Oracle存储过程创建及调用(转)

时间:2022-03-18 09:35:39

相关推荐

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个,数据类型为整形数据

importjava.sql.*;

publicclassProcedureNoArgs

{

publicstaticvoidmain(Stringargs[])throwsException

{

//加载Oracle驱动

DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

//获得Oracle数据库连接

Connectionconn=DriverManager.getConnection("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd");

//创建存储过程的对象

CallableStatementc=conn.divpareCall("{callpro1(?)}");

//给Oracle存储过程的参数设置值,将第一个参数的值设置成188

c.setInt(1,188);

//执行Oracle存储过程

c.execute();

conn.close();

}

}

Ⅱ、带输出参数的情况

过程名称为pro2,参数个数2个,数据类型为整形数据,返回值为整形类型

importjava.sql.*;

publicclassProcedureWithArgs

{

publicstaticvoidmain(Stringargs[])throwsException

{

//加载Oracle驱动

DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());

//获得Oracle数据库连接

Connectionconn=DriverManager.getConnection("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd");

//创建Oracle存储过程的对象,调用存储过程

CallableStatementc=conn.divpareCall("{callpro2(?,?)}");

//给Oracle存储过程的参数设置值,将第一个参数的值设置成188

c.setInt(1,188);

//注册存储过程的第二个参数

c.registerOutParameter(2,java.sql.Types.INTEGER);//执行Oracle存储过程

c.execute();

//得到存储过程的输出参数值并打印出来

System.out.println (c.getInt(2));

conn.close();

}

}

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

Oracle存储过程可以有无参数存储过程和带参数存储过程。

、无参程序过程语法

1createorreplaceprocedureNoParPro

2as;

3begin

4;

5exception //存储过程异常

6;

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; //过程调用结束

12

至此,有关ORACLE的基本存储过程以及对Oracle存储过程的调用方式介绍完毕。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。