Oracle数据库中存储过程的学习实例.docx
- 文档编号:3812130
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:8
- 大小:18.48KB
Oracle数据库中存储过程的学习实例.docx
《Oracle数据库中存储过程的学习实例.docx》由会员分享,可在线阅读,更多相关《Oracle数据库中存储过程的学习实例.docx(8页珍藏版)》请在冰豆网上搜索。
Oracle数据库中存储过程的学习实例
测试用表student:
1.实例1:
Oracle存储过程返回结果集
--声明一个package
createorreplacepackagepackage_pro_testas
typecursor_rsisrefcursor;
Procedureproc_test(p_rsoutcursor_rs);
endpackage_pro_test;
--实现package体,创建存储过程
--IN和OUT参数
--java将IN参数传给CallableStatement对象是通过setXXX方法完成
--的。
该方法继承自
--PreparedStatement。
所传入参数的类型决定了所用的setXXX方法
--(例如,用setFloat来传入float值等)。
CREATEORREPLACEPackageBodyPACKAGE_PRO_TEST
Is
Procedureproc_test(p_rsoutcursor_rs)
is
begin
openp_rsfor'select*fromstudent';
endproc_test;
endPACKAGE_PRO_TEST;
//java中调用存储过程
importjava.sql.CallableStatement;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importoracle.jdbc.OracleResultSet;
/***
*调用存储过程获取查询结果集
*@authorgwy
**/
publicclassTest1{
publicstaticvoidmain(String[]args){
Connectionconn=null;
Statementstmt=null;
ResultSetrs=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包名.存储过程名(?
?
…)”)
*
*
**/CallableStatementcs=conn.prepareCall("{callPACKAGE_PRO_TEST.proc_test(?
)}");
//注册输出参数类型
cs.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
cs.execute();
//获取存储过程返回的结果集
ResultSetors=(ResultSet)cs.getObject
(1);
//迭代结果集
while(ors.next()){
System.out.println("学生编号:
"+ors.getInt("stu_id")+"学生姓名:
"+ors.getString("stu_name")+"学生年龄:
"+ors.getInt("age"));
}
}catch(Exceptione){
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为输出参数
createorreplaceprocedurepro_test(v_stunameinvarchar,out_stuidoutnumber,out_stunameoutvarchar,out_ageoutnumber,out_result_statmentoutvarchar)
is
--声明标志标量
flagnumber;
begin
flag:
=0;
begin
--stu_id,stu_name,age为student表中的字段,--out_stuid,out_stuname,out_age为返回参数
selectstu_id,stu_name,ageintoout_stuid,out_stuname,out_agefromstudentwherestu_name=v_stuname;
exception
whenno_data_foundthen
flag:
=1;
end;
ifflag>0then
out_result_statment:
='查询数据异常!
';
else
out_result_statment:
='成功获取结果!
';
endif;
end;
//java中调用该存储过程
importjava.sql.CallableStatement;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
importoracle.jdbc.OracleResultSet;
/***
*调用存储过程获取单条记录
*@authorgwy
**/
publicclassTest2{
publicstaticvoidmain(String[]args){
Connectionconn=null;
Statementstmt=null;
ResultSetrs=null;
try{
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//创建数据库连接对象
conn=DriverManager.getConnection(
"jdbc:
oracle:
thin:
@localhost:
1521:
orcl","scott","tiger");
System.out.println("连接成功!
");
//创建CallableStatement对象
CallableStatementcs=conn.prepareCall("{callpro_test(?
?
?
?
?
)}");
//给存储过程的对应输入参数传值
cs.setString(1,"tom1");
//注册存储过程的输出参数类型(例:
索引为2的参数类型为NUMBER类型)
cs.registerOutParameter(2,oracle.jdbc.OracleTypes.NUMBE);
cs.registerOutParameter(3,oracle.jdbc.OracleTypes.VARCHAR);
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(Exceptione){
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既作为输入参数,也作为输出参数
createorreplaceprocedurepro_test2(v_stunameinoutvarchar)
is
begin
selectstu_nameintov_stunamefromstudentwherestu_name=v_stuname;
exception
whenno_data_foundthen
dbms_output.put_line('没有找到数据!
');
whenothersthen
dbms_output.put_line('发生其它异常!
');
end;
//java调用存储过程
importjava.sql.CallableStatement;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.Statement;
publicclassTest3{
publicstaticvoidmain(String[]args){
Connectionconn=null;
Statementstmt=null;
ResultSetrs=null;
try{
Class.forName("oracle.jdbc.driver
.OracleDriver
");
conn=DriverManager.getConnection(
"jdbc:
oracle:
thin:
@localhost:
1521:
orcl","scott","tiger");
System.out.println("连接成功!
");
CallableStatementcs=conn.prepareCall("{callpro_test2(?
)}");
cs.setString(1,"tom1");
cs.registerOutParameter(1,
oracle.jdbc.OracleTypes.VARCHAR);
cs.execute();
System.out.println("学生姓
名:
"+cs.getString
(1));
}catch(Exceptione){
e.printStackTrace();
}finally{
if(rs!
=null){
rs=null;
}
if(stmt!
=null){
stmt=null;
}
if(conn!
=null){
conn=null;
}
}
}
}
4.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Oracle 数据库 存储 过程 学习 实例