Oracle 的存储过程以及用jdbc调用存储过程
存储过程 就是一组用于完成特定功能的PL/SQL 具名语句块,该SQL语句集经过编译后存储在数据库系统中。在使用时候,我们只需要通过指定已经定义的存储过程名字并给出对应的参数来执行
存储过程的定义语法
create or replace procedure 过程名(参数名 参数模式 参数类型,参数名 参数模式 参数类型,..... )
is
这里是声明变量的区域
begin
这里是执行的语句块
end;
end 过程名;
注意:当我们定义参数类型时 只能定义他的类型 不能定义他的长度
参数模式:in 输入的参数 ,一般为查询参数
out 输出的参数
in out 既能当做输入的参数 也能当做输出的参数
如果是没有参数的存储过程,则过程名后不能有()
定义一个存储过程没有参数
1 --存储过程 没有参数
2 create or replace procedure first_pro
3 is
4 begin
5 DBMS_OUTPUT.PUT_LINE('hello_pro');
6 end first_pro;
7
8
9 -- 执行存储过程
10 begin
11 first_pro();
12 end;
1 -- 定义一个存储过程,要求传入两个参数,都是数字,实现两个数相加,并将结果返回
2 create or replace procedure sum_pro(x in number ,y out number)
3 is
4
5 begin
6 y:=x+y;
7 end sum_pro;
10 --执行存储过程
11 declare
12 res number;
13 begin
14 -- 注意 当参数模式为 out, in out 那么在传参的时候 我们不能直接去传值而是应该传一个变量
15 res:=3;
16 sum_pro(4,res);
17 end;
1 -- 设计一个存储过程,用于根据员工编号,查询出一条员工记录
2 create or REPLACE PROCEDURE getempbyid_pro(eno in emp.empno%type, emp out emp%rowtype)
3 is
4 begin
5 select *into emp from emp where empno=eno;
6 end getempbyid_pro;
7
8
9 -- 执行存储过程
10 DECLARE
11 -- 这里的eno可在调用过程名的时候直接传值 也可以将值给一个变量 因为他是一个输入参数
12 -- eno emp.empno%type:=7369;
13 emp1 emp%rowtype;
14 begin
15 getempbyid_pro(7369,emp1);
16 DBMS_OUTPUT.put_line(emp1.ename);
17 end ;
18
使用jdbc连接并操作数据库
1.首先要想连接数据库的话就必须要有一个驱动包 ojdbc6.jar 如果安装的jdk5.0之前的可以使用6以下的版本 我的是jdk8.0 这个包在我们安装oracle的时候就已经帮我们下好了
我们只需要在oracle的下载路径下去找就可以找到 不用下
2 接下来就可以去连接Oracle了 注意当我们创建连接的时候 最好先测试一下看连接是否成功 成功了 然后在往下面编写代码 连接成功后
1)先要获得存储过程的语句对象
2).然后在为输入参数赋值
3).注册输出参数类型
4).获取数据
5).关闭资源
1 package jdbc_oracle;
2 import java.sql.CallableStatement;
3 import java.sql.Connection;
4 import java.sql.DriverManager;
5 import java.sql.ResultSet;
6 import java.sql.SQLException;
7 import oracle.jdbc.OracleTypes;
8 public class Test1 {
9 public static void main(String[] args) throws SQLException {
10 // 获取连接
11 Connection con = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/orcl", "hengly", "hengly");
System.out.println("连接成功");
12 // 获得可以执行存储过程的语句对象 , ?代表的是参数, emp_package是我在orcale中定义的包头的名称 ,getEmpbyId 是存储过程的名称
13 CallableStatement cs = con.prepareCall("call emp_package.getEmpbyId(?,?)");
14 // 为存储过程设值 为第一个参数赋值 输入参数可以直接赋值
15 cs.setInt(1, 7369);
16 // 为cs注册输出参数类型 如果为输出参数就必须要注册
17 cs.registerOutParameter(2, OracleTypes.CURSOR);
18 // 执行
19 cs.execute();
20 // 获取数据
21 ResultSet res = (ResultSet) cs.getObject(2);
22 // 算出有多少列
23 int num = res.getMetaData().getColumnCount();
24 while (res.next()) {
25 for (int i = 0; i < num; i++) {
26 String s1 = res.getString(i + 1);
27 System.out.print(s1 + " ");
28 }
29 }
30 // 关闭资源, 先开后关闭
31 res.close();
32 cs.close();
33 con.close();
34
35 }
36
37 }
1 CREATE OR REPLACE PACKAGE emp_package
2 AS
3 -- 定义一个动态游标
4 TYPE emp_cursor IS REF CURSOR;
5 -- 定义一个根据编号查询信息的存储过程
6 PROCEDURE getEmpbyId(eno emp.empno%type,ec out emp_cursor);
7 END emp_package ;
8
9 -- 编写包体
10 CREATE OR REPLACE PACKAGE BODY emp_package
11 AS
12 PROCEDURE getEmpbyId(eno emp.empno%type,ec out emp_cursor)
13 AS
14 BEGIN
15 OPEN ec FOR select * from emp where empno=eno;
16 END getEmpbyId ;
17 END emp_package ;
Oracle 的存储过程以及用jdbc调用存储过程的更多相关文章
- oracle学习笔记(二十三)——JDBC调用存储过程以及批量操作
jdbc调用存储过程 使用并获得out模式的参数返回值 //存储过程为sum_sal(deptno department.deptno%type,sum in out number) Callable ...
- Java数据库连接——JDBC调用存储过程,事务管理和高级应用
一.JDBC常用的API深入详解及存储过程的调用 相关链接:Jdbc调用存储过程 1.存储过程(Stored Procedure)的介绍 我们常用的操作数据库语言SQL语句在执行的时候需要先编译,然后 ...
- JDBC调用存储过程的例子
下面是我学到了Oracle存储过程,在这里跟大家简单的分享一下利用JDBC调用存储过程的例子: 废话就不啰嗦,现在就直接上机代码. 首先我利用的是Oracle中默认的 scott 数据库里的 emp员 ...
- Spring JDBC调用存储过程
以下示例将演示spring jdbc如何调用存储过程.将通过调用存储过程来读取Student表中的一个可用记录.将传递一个学生ID并获取学生记录信息. 语法: SimpleJdbcCall jdbcC ...
- jdbc调用存储过程的方法
----------------------------jdbc调用存储过程的方法---------------------------------------------------private ...
- JDBC调用存储过程
一. JDBC调用存储过程 (1)使用存储过程SQL编写的程序代码,等一段语句和控制流语句.在创建时被编译成机器代码和存储在数据库中的client转让. 存储过程具有以下优势: 1.所生成的机器代码被 ...
- Java数据库连接--JDBC调用存储过程,事务管理和高级应用
相关链接:Jdbc调用存储过程 一.JDBC常用的API深入详解及存储过程的调用 1.存储过程的介绍 我们常用的操作数据库语言SQL语句在执行的时候要先进行编译,然后执行,而存储过程是在大型数据库系统 ...
- JDBC(13)—JDBC调用存储过程和函数
步骤: JDBC调用存储过程和函数 步骤: ①:通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例,在使用Connection对象的pre ...
- Java JDBC调用存储过程:无参、输入带参、输出及输出带参
Java JDBC调用存储过程:无参.输入带参.输出及输出带参 示例代码: package xzg; import java.sql.CallableStatement; import java.sq ...
随机推荐
- 深入解析 ERP 计划的各个层次
ERP 生产计划管理按照 ERP 计划的层次主要分为:经营规划.销售和运作规划.主生产计划.物料需求计划.能力需求计划.执行能力计划.执行物料计划等. 经营规划是企业的战略规划,用于确定企业经营目标和 ...
- AngularJs 第一个自定义指令编写
公司在做一个OA系统, 包括移动端(从微信企业号进入OA系统),电脑端. 电脑端还是用的传统的easyui做界面,asp.net mvc作为服务端.这个技术已经很成熟了配合权限框架很快就能开发出来.但 ...
- 多张报表导出到一个多sheet页excel
业务需求: 通过勾选不同的报表名称,然后直接执行导出excel.并且这些报表需要统一导入到一个excel的多个sheet页中,并且对某些报表可能需要增加一些类似'已审核'之类的图片(展现时并没有 ...
- 32位Windows7 利用多余的不能识别的电脑内存 RAMDISK5.5教程
32位Windows7 利用多余的不能识别的电脑内存 RAMDISK5.5教程 环境:Windows7 32位 Ultimate 内存8GB 只能识别2.95GB内存 ramdisk5.5只适用于Wi ...
- 304 Not Modified 简述
在客户端向服务端发送http请求时,若返回状态码为304 Not Modified 则表明此次请求为条件请求.在请求头中有两个请求参数:If-Modified-Since 和 If-None-Matc ...
- Oracle EBS GL 创建会计科目
SELECT ct.trx_number ,l.accounting_class_code ,l.entered_dr ,l.entered_cr ,fnd_flex_ext.get_segs('SQ ...
- mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)
mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...
- iOS设计模式 - 模板
iOS设计模式 - 模板 原理图 说明 定义一个操作中的算法的骨架,而将步骤延迟到子类中.模板方法使得子类可以不改变一个算法的结构即可重定义算法的某些特定步骤. 源码 https://github.c ...
- windows下搭建vue开发环境
Vue.js是一套构建用户界面的 “渐进式框架”.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注视图层,并且非常容易学习,非常容易与其它库或已有项目整合.2016 ...
- 关于第一场HBCTF的Web题小分享,当作自身的笔记
昨天晚上6点开始的HBCTF,虽然是针对小白的,但有些题目确实不简单. 昨天女朋友又让我帮她装DOTA2(女票是一个不怎么用电脑的),然后又有一个小白问我题目,我也很热情的告诉她了,哎,真耗不起. 言 ...