最近在项目中遇到在mybatis中调用oracle存储过程的问题,网上各种查询,最终解决了问题,在我们项目中我只需要oracle 的存储过程返回一个字符串用来存入数据库作为表数据的主键,

接下来整理代码:

   首先构建存储过程getSequence,一个输入,输出参数。

省略数据库表的创建。

create or replace

procedure getSequence(tableName in varchar2, outId out varchar2)
is

PRAGMA AUTONOMOUS_TRANSACTION; --自治事务

ls_year varchar2(4); --年度
ls_month varchar2(2); --月度
ls_day varchar2(2); --日

--自治事务: 防止外层事务调用内层事务时被内层事务中的commit提交了不该提交的内容 
--version: 2.0

begin
ld_date := sysdate;
ls_table := lower(as_table_code);
ls_year := To_char(ld_date, 'yyyy' );
ls_month := To_char(ld_date, 'mm' );
ls_day := To_char(ld_date, 'dd' );
select nvl(max(sequence_value),0)
into ld_value
from sm_sequence
where sequence_code = ls_table ;

If ld_value = 0 then

ld_value := 1;
insert into sm_sequence
(sequence_code,
sequence_year,
sequence_month,
sequence_day,
sequence_value )
values
(ls_table,
to_char( sysdate, 'yyyy' ),
to_char( sysdate, 'mm' ),
to_char( sysdate, 'dd' ),
ld_value );

else
select sequence_year, sequence_month, sequence_day, sequence_value
into ln_year, ln_month, ln_day, ld_value
from sm_sequence
where sequence_code = ls_table;
if ln_year <> to_number(to_char(sysdate, 'yyyy')) or
ln_month <> to_number(to_char(sysdate, 'mm')) or
ln_day <> to_number(to_char(sysdate, 'dd')) then
ld_value := 1;
else
ld_value := ld_value + 1;
end if;
update sm_sequence
set sequence_value = ld_value,
sequence_year = ls_year,
sequence_month = ls_month,
sequence_day = ls_day
where sequence_code = ls_table ;

End If;
commit;
as_id := ls_year ||ls_month||ls_day||ltrim(to_char(ld_value, '00000000' ));
end ;

函数构建完成;

在pl/sql 中调用:

SQL> set serveroutput onSQL> DECLARE  2    tableName varchar2(20);  3    row_id varchar2(10);  4  BEGIN  5    getSequence(tableName,row_id);  6      7    dbms_output.put_line(row_id);
  8  END;  9  /ename

在Spring+springMVC+myBatis项目中调用,

java调用:

dao层:  

  public interface getMapper(){

    public void getSequence(HashMap<String,Object> params);

   }

mybatis 层xml 配置:

<parameterMap type="java.util.Map" id="getUserCountMap">
<parameter property="tableName" mode="IN" jdbcType="VARCHAR"/>
<parameter property="rowId" mode="OUT" jdbcType="VARCHAR"/>
</parameterMap>
<select id="getSequence" statementType="CALLABLE"
parameterMap="getUserCountMap" >
{call getSequence (?,?)}
</select>

service层调用:

HashMap<String,Object> param =new HashMap<String,Map>();

param.put("tableName","表名");

getMapper.getSequence(param);//此处特别注意调用时不需要返回类型,一旦执行完存储过程map中就已经存在值

System.out.print(param.get("rowId"));

以上是这次项目开发中遇到的问题,另外spring+springMVC+mybatis调用oracle存储过程返回多条数据的还在研究中,先整理这么多

转载于:https://www.cnblogs.com/zhencode666/p/6063536.html

spring+springMvc+mybatis 调用oracle 存储过程相关推荐

  1. mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析

    mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析 参考文章: (1)mybatis 调用 oracle 存储过程 select in ...

  2. java c3p0 存储过程_JAVA Spring 连接池 调用 Oracle 存储过程的问题?

    求助,JAVA Spring 连接池 调用 Oracle 存储过程的问题?在Spring中配置了c3P0的连接池,在调用Oracle的存储过程时,报错[code]java.lang.ClassCast ...

  3. mybatis调用oracle存储过程

    有输入与输出参数的存储过程 oracle存储过程部分代码: create or replace procedure PT_copy_Shipment_One_Data( oldShipmentId i ...

  4. springboot+mybatis调用oracle存储过程

    1 存储过程参数为VARCHAR 代码逻辑:controller层定义实体类对象entity,并entity.set给存储过程的输入参数赋值,把赋值后的实体类通过service层传到dao层,然后通过 ...

  5. mybatis调用oracle过程,使用MyBatis调用Oracle存储过程

    一.Oracle存储过程 存储过程代码: create or replace procedure TEST_DEMO_PROC(param_name IN VARCHAR2, return_resul ...

  6. (五)MyBatis调用oracle存储过程

    目录 数据表Emp 创建存储过程(根据性别获取用户信息(游标集合)) 实体类Emp EmpDaoMapper接口 EmpDaoMapperImpl实现类 EmpDaoMapper.xml映射文件 实体 ...

  7. JDBC Mybatis 调用 ORACLE 存储过程 函数 返回 varray 类型 function return varray out varray

    ORACLE中使用VARRAY解决字符串数组问题 博客分类: ORACLE/MYSQL总结 OracleSQLJDBCCC++ 如何从 PL/SQL 存储函数中返回数组类型 思路:在 Oracle 数 ...

  8. mybatis调用oracle存储过程例子.

    1.MYBATIS方法: <select id="getFlowNum" statementType="CALLABLE"> <![CDATA ...

  9. Mybatis调用oracle 存储过程

    https://my.oschina.net/lujianing/blog/296427

最新文章

  1. 英特尔王锐:软硬件并驾齐驱,开发者是真英雄
  2. 平台篇-58 HBase 平台实践和应用
  3. web前端学习(二)html学习笔记部分(3)--range对象
  4. 使用jQuery更改下拉列表的选定值
  5. 接口测试用例设计思路_接口测试平台设计思路10:成品总览白盒模块
  6. linux开发教程,Java基础面试题(2)
  7. 线上学python哪家好-Python线上和线下培训哪个好?老男孩Python
  8. poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
  9. 关于Linux的基础中的基础和一些基础小命令
  10. mysql5.7.14 配置文件_mysql 5.7.14 安装配置方法图文教程(转)
  11. 1 分钟 Serverless 部署掌上游戏机,“一行命令”找回小时候的乐趣!
  12. bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】
  13. Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
  14. python逢7过小游戏_while循环拓展:用python做一个逢七过小游戏
  15. 前端学习 第二弹: JavaScript中的一些函数与对象(1)
  16. python多重继承super父类参数_Python super()函数使用及多重继承
  17. 计算机上找不到运行程序怎么办,电脑联网时显示找不到应用程序怎么办
  18. 基于深度学习的图像超分论文推荐
  19. C | 运算符、表达式和语句
  20. Android——UI开发的点点滴滴1

热门文章

  1. 软件:推荐七款Windows下宝藏软件,值得收藏!
  2. 7个HTML你可能不知道的使用技巧
  3. 爬虫必须得会的Web知识
  4. 【基础】jquery全选、反选、全不选代码
  5. 真诚推荐7个能助你成长的前端大佬
  6. MySQL 不落地迁移、导入 PostgreSQL - 推荐 rds_dbsync 1
  7. 【SSH网上商城项目实战19】订单信息的级联入库以及页面的缓存问题
  8. Angular2中的路由(简单总结)
  9. 部署站点支持Https访问的方法
  10. C#------如何判断输入的是否为纯数字