Oracle存储过程创建及Java调用

Wesley13
• 阅读 417

**在大型数据库系统中,有两个很重要作用的功能,那就是存储过程和触发器。在数据库系统中无论是存储过程还是触发器,都是通过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个,数据类型为整形数据
**

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

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

Oracle存储过程创建及Java调用 import java.sql. * ;
Oracle存储过程创建及Java调用 public class ProcedureWithArgs
{
Oracle存储过程创建及Java调用 public static void main(String args[]) throws Exception
Oracle存储过程创建及Java调用 {
Oracle存储过程创建及Java调用 //加载Oracle驱动 Oracle存储过程创建及Java调用 DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
Oracle存储过程创建及Java调用 //获得Oracle数据库连接 Oracle存储过程创建及Java调用 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd ");
Oracle存储过程创建及Java调用
Oracle存储过程创建及Java调用 //创建Oracle存储过程的对象,调用存储过程
Oracle存储过程创建及Java调用 CallableStatement c=conn.divpareCall("{call pro2(?,?)}");
Oracle存储过程创建及Java调用
Oracle存储过程创建及Java调用 //给Oracle存储过程的参数设置值 ,将第一个参数的值设置成188
Oracle存储过程创建及Java调用 c.setInt(1,188);
Oracle存储过程创建及Java调用 //注册存储过程的第二个参数
c.registerOutParameter(2,java.sql.Types.INTEGER);
Oracle存储过程创建及Java调用 //执行Oracle存储过程
Oracle存储过程创建及Java调用 c.execute();
//得到存储过程的输出参数值并打印出来
System.out.println (c.getInt(2));
Oracle存储过程创建及Java调用 conn.close();
Oracle存储过程创建及Java调用 }
Oracle存储过程创建及Java调用 }**

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

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

1 create or replace procedure NoParPro
2 as Oracle存储过程创建及Java调用 ;
3 begin
4 Oracle存储过程创建及Java调用 ;
5 exception //存储过程异常
6 Oracle存储过程创建及Java调用 ;
7 end ;
8

**
二、带参存储过程实例**

1 create or replace procedure queryempname(sfindno emp.empno % type) as
2 sName emp.ename % type;
3 sjob emp.job % type;
4 begin
5 ....
7 exception
....
14 end ;
15

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

1 create or replace procedure runbyparmeters (isal in emp.sal % type,
sname out varchar ,sjob in out varchar )
2 as icount number ;
3 begin
4 select count ( * ) into icount from emp where sal > isal and job = sjob;
5 if icount = 1 then
6 ....
9 else
10 ....
12 end if ;
13 exception
14 when too_many_rows then
15 DBMS_OUTPUT.PUT_LINE( ' 返回值多于1行 ' );
16 when others then
17 DBMS_OUTPUT.PUT_LINE( ' 在RUNBYPARMETERS过程中出错! ' );
18 end ;
19

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

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

过程调用方式二

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
MySQL数据库表设计规范
一、数据库设计1、一般都使用INNODB存储引擎,除非读写比率<1%,才考虑使用MYISAM存储引擎;其他存储引擎请在DBA的建议下使用。2、Storedprocedure(包括存储过程,函数,触发器)对于MYSQL来说还不是很成熟,没有完善的出错记录处理,不建议使用。3、UUID(),USER()这样的
Wesley13 Wesley13
2年前
Mysql优化
一、存储过程1.1、什么是存储过程  就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法。ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用。1.2、存储过程有哪些特性  有输入输出参数,可
Wesley13 Wesley13
2年前
mysql存储过程和自定义函数
存储过程简介SQL语句需要先编辑后执行,而存储过程是一组为了完成特定功能的SQL语句集,经编译后存储过程在数据库中,用户通过制定存储过程的名字并传给参数来调用它。存储过程是可编程的函数,在数据库中创建并保持,可以由SQL和控制结构组成。档想要在不同的应用平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的,数据库中的存储过程可以看错
Stella981 Stella981
2年前
SQL Server数据库基础知识——存储过程
SQLServer数据库基础知识存储过程概述什么是存储过程?存储过程的种类如何创建、修改、删除、调用存储过程?存储过程的优缺点存储过程和触发器的区别?存储过程和函数的区别?
Easter79 Easter79
2年前
SQL Server数据库基础知识——存储过程
SQLServer数据库基础知识存储过程概述什么是存储过程?存储过程的种类如何创建、修改、删除、调用存储过程?存储过程的优缺点存储过程和触发器的区别?存储过程和函数的区别?
Wesley13 Wesley13
2年前
Mysql存储过程
SQL语句需要先编译然后执行,而存储过程(StoredProcedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。存储过程是可编程的函数,在数据库中创建并保存,可以由SQL语句和控制结构组成。当想要在不同的应用程序或平台上执行相同的函数,或者封装特定功能时
Wesley13 Wesley13
2年前
Oracle存储过程
1、定义所谓存储过程(StoredProcedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中。在使用时候,用户通过指定已经定义的存储过程名字并给出相应的存储过程参数来调用并执行它,从而完成一个或一系列的数据库操作。2、存储过程的创建Oracle存储过程包含三部分