首页 Oracle数据库中存储过程的学习实例

Oracle数据库中存储过程的学习实例

举报
开通vip

Oracle数据库中存储过程的学习实例Oracle数据库中存储过程的学习实例 测试用表student: 1. 实例1:Oracle存储过程返回结果集 --声明一个package create or replace package package_pro_test as type cursor_rs is ref cursor; Procedure proc_test(p_rs out cursor_rs); end package_pro_test; --实现package体,创建存储过程 -- IN 和OUT 参数 --java将...

Oracle数据库中存储过程的学习实例
Oracle数据库中存储过程的学习实例 测试用表student: 1. 实例1:Oracle存储过程返回结果集 --声明一个package create or replace package package_pro_test as type cursor_rs is ref cursor; Procedure proc_test(p_rs out cursor_rs); end package_pro_test; --实现package体,创建存储过程 -- IN 和OUT 参数 --java将IN 参数传给 CallableStatement 对象是通过 setXXX 方法完成 --的。该方法继承自 --PreparedStatement。所传入参数的类型决定了所用的setXXX 方法 --(例如,用 setFloat 来传入float 值等)。 CREATE OR REPLACE Package Body PACKAGE_PRO_TEST Is Procedure proc_test(p_rs out cursor_rs) is begin open p_rs for 'select * from student'; end proc_test; end PACKAGE_PRO_TEST; //java中调用存储过程 import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import oracle.jdbc.OracleResult; Set /*** * 调用存储过程获取查询结果集 * @author gwy **/ public class Test1 { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); System.out.println("连接成功~"); //核心代码: /** 通过call调用PACKAGE_PRO_TEST.proc_ * test存储过程。通过数据库连接对象 * conn调用prepareCall()方法创建CallableStatement 对象。 * 存储过程调用形式:?conn. prepareCall(“call 存储过程名(?,?,„)”) * ? conn. prepareCall(“call 包名.存储过程名(?,?,„)” ) * * **/ CallableStatement cs = conn.prepareCall("{call PACKAGE_PRO_TEST.proc_test(?)}"); //注册输出参数类型 cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR); cs.execute(); //获取存储过程返回的结果集 ResultSet ors = (ResultSet)cs.getObject(1); //迭代结果集 while(ors.next()){ System.out.println("学生编号:"+ors.getInt("stu_id")+"学生姓名:"+ors.getString("stu_name")+"学生年龄:"+ors.getInt("age")); } } catch (Exception e) { e.printStackTrace(); } finally { if (rs != null) { rs = null; } if (stmt != null) { stmt = null; } if (conn != null) { conn = null; } } } } 2. 实例2:通过变量列表获取单条记录值 //创建存储过程: --in关键词修饰的v_stuname为输入参数,out关键词修饰的out_stuid,out_stuname,out_age, out_result_statement为输出参数 create or replace procedure pro_test(v_stuname in varchar,out_stuid out number,out_stuname out varchar,out_age out number,out_result_statment out varchar) is --声明标志标量 flag number; begin flag:=0; begin --stu_id,stu_name,age为student表中的字段,--out_stuid,out_st uname,out_age为返回参数 select stu_id,stu_name,age into out_stuid,out_stuname,out_age from student where stu_name=v_stuname; exception when no_data_found then flag:=1; end; if flag>0 then out_result_statment:='查询数据异常!'; else out_result_statment:='成功获取结果!'; end if; end; //java中调用该存储过程 import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import oracle.jdbc.OracleResult; Set/*** * 调用存储过程获取单条记录 * @author gwy **/ public class Test2 { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { //加载Oracle驱动 Class.forName("oracle.jdbc.driver.OracleDriver"); //创建数据库连接对象 conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); System.out.println("连接成功~"); //创建CallableStatement对象 CallableStatement cs = conn.prepareCall("{call pro_test(?,?,?,?,?)}"); //给存储过程的对应输入参数传值 cs.setString(1, "tom1"); //注册存储过程的输出参数类型(例:索引为2的参数类型为 NUMBER类型) cs.registerOutParameter(2,oracle.jdbc.OracleTypes.NUMBE); cs.registerOutParameter(3,oracle.jdbc.OracleTypes.VARCHA R); cs.registerOutParameter(4,oracle.jdbc.OracleTypes.NUMBER ); cs.registerOutParameter(5, oracle.jdbc.OracleTypes.VARCHAR); cs.execute(); System.out.println("学生编号:"+cs.getInt(2)+"学生姓 名:"+cs.getString(3)+"学生年龄:"+cs.getInt(4)); System.out.println("异常:"+cs.getString(5)); } catch (Exception e) { e.printStackTrace(); } finally { if (rs != null) { rs = null; } if (stmt != null) { stmt = null; } if (conn != null) { conn = null; } } } } 3. 实例3:存储过程的参数既作为输入参数也作为输出参数 //创建存储过程 --参数v_stuname被in和out关键字修饰,即v_stuname既作为输入参数,也作 为输出参数 create or replace procedure pro_test2(v_stuname in out varchar) is begin select stu_name into v_stuname from student where stu_name=v_stuname; exception when no_data_found then dbms_output.put_line('没有找到数据~'); when others then dbms_output.put_line('发生其它异常~'); end; //java调用存储过程 import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; public class Test3 { public static void main(String[] args) { Connection conn = null; Statement stmt = null; ResultSet rs = null; try { Class.forName("oracle.jdbc.driver .OracleDriver "); conn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); System.out.println("连接成功~"); CallableStatement cs = conn.prepareCall("{call pro_test2(?)}"); cs.setString(1, "tom1"); cs.registerOutParameter(1, oracle.jdbc.OracleTypes.VARCHAR); cs.execute(); System.out.println("学生姓 名:"+cs.getString(1)); } catch (Exception e) { e.printStackTrace(); } finally { if (rs != null) { rs = null; } if (stmt != null) { stmt = null; } if (conn != null) { conn = null; } } } } 4.
本文档为【Oracle数据库中存储过程的学习实例】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_721103
暂无简介~
格式:doc
大小:26KB
软件:Word
页数:0
分类:企业经营
上传时间:2017-10-15
浏览量:27