首页 / ORACLE / oracle存储过程入门
oracle存储过程入门
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了oracle存储过程入门,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5513字,纯文字阅读大概需要8分钟。
内容图文
![oracle存储过程入门](/upload/InfoBanner/zyjiaocheng/450/31f5bf80ec8540d7b8d356ef2f84ca70.jpg)
1.在数据库中创建以下的存储过程:
java代码:
- create or replace procedure pro_hello(p_user_name in varchar2,p_result out varchar2) is
- begin
- p_result := ‘hello,‘ || p_user_name;
- end;
2.编写SQL映射文件mapper.xml:
java代码:
- <select id="proHello" statementType="CALLABLE">
- <![CDATA[
- {call pro_hello (#{p_user_name,mode=IN,jdbcType=VARCHAR},#{result,mode=OUT,jdbcType=VARCHAR})}
- ]]>
- </select>
3.编写JAVA代码调用存储过程
java代码:
- public class ProcedureTest {
- public static void main(String[] args) throws IOException {
- String resource = "mybatis.cfg.xml";
- Reader reader = Resources.getResourceAsReader(resource);
- SqlSessionFactory ssf = new SqlSessionFactoryBuilder().build(reader);
- SqlSession session = ssf.openSession();
- try {
- Map<String, String> param = new HashMap<String, String>();
- param.put("p_user_name", "zhangsan");
- String returnValue = (String) session.selectOne("User.proHello", param);
- System.out.println("message=" + param.get("p_user_name"));
- System.out.println("result=" + param.get("result"));
- System.out.println("returnValue=" + returnValue);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- session.close();
- }
- }
- }
4.执行Java代码,控制台输出结果如下:
java代码:
- 2012-03-07 20:36:32,406 DEBUG [java.sql.PreparedStatement] -==> Executing: {call pro_hello(?,?)}
- 2012-03-07 20:36:32,406 DEBUG [java.sql.PreparedStatement] -==> Parameters: zhangsan(String)
- message=zhangsan
- (mybatis 调用存储过程另一种实现)Mybatis默认查询存储过程的返回值是使用参数传来传去的,从参数里获取返回值总让我感觉怪怪的,特别是在使用接口做Dao的时候,破坏了Dao接口方法的统一性。
-
然后就有了mybatis-callable,获得方式如下:
?1 2 3 4 5 6 7 8 9 <
dependencies
>
...
<
dependency
>
<
groupId
>com.github.miemiedev</
groupId
>
<
artifactId
>mybatis-callable</
artifactId
>
<
version
>1.0</
version
>
</
dependency
>
...
</
dependencies
>
配置是这样的:
?1 2 3 4 5 6 7 8 9 <?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!
DOCTYPE
configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<
configuration
>
<
plugins
>
<
plugin
interceptor
=
"com.github.miemiedev.mybatis.callable.CallableConvertInterceptor"
> </
plugin
>
</
plugins
>
</
configuration
>
创建一个查询,需要注意的是只有statementType为CALLABLE时拦截器才会起作用:
?1 2 3 4 5 6 7 8 9 <
select
id
=
"query2"
statementType
=
"CALLABLE"
>
<![CDATA[
{call test_proc2(
#{acResult,mode=OUT,jdbcType=CURSOR,javaType=ResultSet, resultMap=hashMap},
#{userType},
#{branchCode}
)}
]]>
</
select
>
然后Dao或许是这样的,接口也是一样的:
?1 2 3 4 5 6 7 public List<
Map
<String, Object>> query2(String userType, String branchCode){
Map<
String
, Object> params = new HashMap<
String
, Object>();
params.put("userType",userType);
params.put("branchCode",branchCode);
//存储过程只返回一个游标,则使用selectList返回List
return getSqlSession().selectList("db.table.user.query2", params);
}
===========================================
返回单个参数但是不是游标的话就这样
?1 2 3 4 5 6 7 8 9 <
select
id
=
"query3"
statementType
=
"CALLABLE"
>
<![CDATA[
{call test_proc3(
#{retCode,mode=OUT,jdbcType=INTEGER},
#{userType},
#{branchCode}
)}
]]>
</
select
>
1 2 3 4 5 6 7 public Integer query3(String userType, String branchCode){
Map<
String
, Object> params = new HashMap<
String
, Object>();
params.put("userType",userType);
params.put("branchCode",branchCode);
//存储过程只有一个返回值,并且不是游标,则使用selectOne
return getSqlSession().selectOne("db.table.user.query3", params);
}
===========================================
返回多个参数,里面啥都有:
?1 2 3 4 5 6 7 8 9 10 <
select
id
=
"query"
statementType
=
"CALLABLE"
>
<![CDATA[
{call test_proc(
#{retCode,mode=OUT,jdbcType=INTEGER},
#{acResult,mode=OUT,jdbcType=CURSOR,javaType=ResultSet, resultMap=hashMap},
#{userType},
#{branchCode}
)}
]]>
</
select
>
1 2 3 4 5 6 7 public Map<
String
, Object> query(String userType, String branchCode){
Map<
String
, Object> params = new HashMap<
String
, Object>();
params.put("userType",userType);
params.put("branchCode",branchCode);
//存储过程只有一个返回值,并且不是游标,则使用selectOne
return getSqlSession().selectOne("db.table.user.query", params);
}
Map中包含所有存储过程输出的结果,Key是存储过程的参数名,按需来取就行了。
=============================================
上面看上去规则有点麻烦,其实用接口做的话就不用考虑是selectList还是selectOne了,直接接收返回值就可以。
=============================================
自己定义结果集的话参考一下SimpleResultHandler的实现就行了,反正把自己实现的按照下面这么配就行了。不配resultHandler的话默认就是SimpleResultHandler了。
?1 2 3 <
plugin
interceptor
=
"com.github.miemiedev.mybatis.callable.CallableConvertInterceptor"
>
<
property
name
=
"resultHandler"
value
=
"com.github.miemiedev.mybatis.callable.handler.SimpleResultHandler"
/>
</
plugin
>
完。
oracle存储过程入门
标签:
本文系统来源:http://www.cnblogs.com/leo3689/p/4576990.html
内容总结
以上是互联网集市为您收集整理的oracle存储过程入门全部内容,希望文章能够帮你解决oracle存储过程入门所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。