Oracle之存储过程
来源:互联网 发布:域名怎么注册 编辑:程序博客网 时间:2024/06/10 00:47
Oracle(持续更新中)
《Oracle11g之安装与卸载》
《Oracle之常用命令》
《Oracle之用户管理》
《Oracle之pl/sql》
《Oracle之块》
《Oracle之存储过程》
存储过程用于执行特定的操作。当建立存储过程时,既可以指定输入参数(in),也可以指定输出参数(out)。
通过在存储过程中使用输入参数,可以将数据传递到执行部分。通过使用输出参数,可以将执行部分的数据传递到应用环境。在sql/plus中可以使用create procedure 命令来建立过程。
优点:sql语句每次都需要被编译,过程只需要编译一次。实现模块化、减少网络传输量、提高安全性(在Java中调用只需要传参数,而不需要传完整的sql语句)。
缺点:移植性不好,如:更换数据库,所有存储过程需手动导入
目录
一、插入例子
- 创建存储过程
- 执行存储过程
- java中调用存储过程
二、查询例子
- 查询结果单一
- 查询结果多个
一、插入例子
插入的存储过程与删除、更改类似。
1、创建存储过程
代码如下:
create or replace procedure p_insert(param1 in varchar2) isbegin insert into data(info) values(param1);end;/--以/作为结束,不能直接复制,后续单独加上
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
解析:
create or replace :代表创建或替换,也可单独使用create
p_insert :代表存储过程名
varchar2:Oracle专有的字符数据类型
param1:输入参数名
2、执行存储过程
可以使用 call或exe[cute]执行存储过程
如图所示:
3、java中调用存储过程
代码如下:
Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//获得连接CallableStatement cstm = conn.prepareCall("{call p_insert(?)}");//连接对应的存储过程cstm.setString(1, "332211");//插入数据,该参数在第一位,则第一个参数为1cstm.execute();//执行
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
二、查询例子
补充:data表是博主自己创建的,内容在上面图中有给出。
1、查询结果单一
(1)创建存储过程
代码如下:
create or replace procedure p_query1(param1 in varchar2,param2 out varchar2) isbegin--查询结果使用into 放入param2变量(查询结果单一) select info into param2 from data where info=param1;end;/
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
(2)java中调用存储过程
代码如下:
Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动 Connectionconn conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//获得连接 CallableStatement cstm = conn.prepareCall("{call p_query1(?,?)}");//连接对应的存储过程p_query1 cstm.setString(1, "ccc");//设置查询数据为ccc,该参数在第1位 cstm.registerOutParameter(2, oracle.jdbc.OracleTypes.VARCHAR); //设置返回类型 cstm.execute();//执行 String result = cstm.getString(2);//得到返回数据 System.out.println("执行结果:"+result);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
java代码中,设置返回类型要与创建存储过程中时一致。
结果如图所示:
2、查询结果多个
(1)创建package
包名为pack_info,内部定义个游标类型。
create or replace package pack_info is--定义一个游标类型,名为c_infotype c_info is ref cursor;end pack_info;/
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
(2)创建存储过程
create or replace procedure p_query2(param1 in varchar2,param2 out pack_info.c_info) isbegin--打开游标执行查询语句 open param2 for select * from data where info=param1;end;/
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
pack_info.c_info:代表使用pack_info中的c_info类型,该类型为游标类型。
(3)java中调用存储过程
代码如下:
Class.forName("oracle.jdbc.driver.OracleDriver");//加载驱动 Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");//获得连接 CallableStatement cstm = conn.prepareCall("{call p_query2(?,?)}");//连接对应的存储过程 cstm.setString(1, "ccc");//设置查询数据,该参数在第1位 cstm.registerOutParameter(2, oracle.jdbc.OracleTypes.CURSOR); //设置返回类型为游标 cstm.execute();//执行 ResultSet result = (ResultSet) cstm.getObject(2);//得到返回数据 while (result.next()) { System.out.println(result.getString("info")); System.out.println(result.getString("num")); }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
结果如图所示:
- oracle之存储过程
- Oracle之存储过程
- Oracle之存储过程
- Oracle之存储过程
- Oracle之存储过程
- Oracle之基本存储过程
- oracle存储过程之immediate
- oracle印象之存储过程
- oracle存储过程之游标
- 【Oracle学习】之 存储过程
- Oracle学习之存储过程
- oracle学习之存储过程
- [ oracle ] oracle之路4---存储过程!
- ORACLE存储过程(二)之存储过程的调用
- oracle之存储过程2-创建存储过程
- oracle之存储过程3-执行存储过程
- oracle之存储过程4-存储过程变量的使用
- 存储过程之八-java代码调用oracle存储过程
- 蓝桥-图4-linkedlist广度优先搜索
- ASP.NET Razor – 标记
- java原装代码完成pdf在线预览和pdf打印及下载
- Jack is required to support java 8 language features. Either enable Jack o的解决
- PHP-实现文件上传
- Oracle之存储过程
- web前端研发工程师编程能力成长之路 [转]
- SpringMVC与Struts2区别与比较总结
- mysql建索引的几大原则
- 一个可以免费领取大额淘宝天猫优惠卷群
- yang模型理解
- 最简真分数
- 计数器的CPU
- 0002-大话数据——(数据模型)