spring+springMvc+mybatis 调用oracle 存储过程
最近在项目中遇到在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 存储过程相关推荐
- mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析
mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析 参考文章: (1)mybatis 调用 oracle 存储过程 select in ...
- java c3p0 存储过程_JAVA Spring 连接池 调用 Oracle 存储过程的问题?
求助,JAVA Spring 连接池 调用 Oracle 存储过程的问题?在Spring中配置了c3P0的连接池,在调用Oracle的存储过程时,报错[code]java.lang.ClassCast ...
- mybatis调用oracle存储过程
有输入与输出参数的存储过程 oracle存储过程部分代码: create or replace procedure PT_copy_Shipment_One_Data( oldShipmentId i ...
- springboot+mybatis调用oracle存储过程
1 存储过程参数为VARCHAR 代码逻辑:controller层定义实体类对象entity,并entity.set给存储过程的输入参数赋值,把赋值后的实体类通过service层传到dao层,然后通过 ...
- mybatis调用oracle过程,使用MyBatis调用Oracle存储过程
一.Oracle存储过程 存储过程代码: create or replace procedure TEST_DEMO_PROC(param_name IN VARCHAR2, return_resul ...
- (五)MyBatis调用oracle存储过程
目录 数据表Emp 创建存储过程(根据性别获取用户信息(游标集合)) 实体类Emp EmpDaoMapper接口 EmpDaoMapperImpl实现类 EmpDaoMapper.xml映射文件 实体 ...
- JDBC Mybatis 调用 ORACLE 存储过程 函数 返回 varray 类型 function return varray out varray
ORACLE中使用VARRAY解决字符串数组问题 博客分类: ORACLE/MYSQL总结 OracleSQLJDBCCC++ 如何从 PL/SQL 存储函数中返回数组类型 思路:在 Oracle 数 ...
- mybatis调用oracle存储过程例子.
1.MYBATIS方法: <select id="getFlowNum" statementType="CALLABLE"> <![CDATA ...
- Mybatis调用oracle 存储过程
https://my.oschina.net/lujianing/blog/296427
最新文章
- 英特尔王锐:软硬件并驾齐驱,开发者是真英雄
- 平台篇-58 HBase 平台实践和应用
- web前端学习(二)html学习笔记部分(3)--range对象
- 使用jQuery更改下拉列表的选定值
- 接口测试用例设计思路_接口测试平台设计思路10:成品总览白盒模块
- linux开发教程,Java基础面试题(2)
- 线上学python哪家好-Python线上和线下培训哪个好?老男孩Python
- poj 2892---Tunnel Warfare(线段树单点更新、区间合并)
- 关于Linux的基础中的基础和一些基础小命令
- mysql5.7.14 配置文件_mysql 5.7.14 安装配置方法图文教程(转)
- 1 分钟 Serverless 部署掌上游戏机,“一行命令”找回小时候的乐趣!
- bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】
- Mysql学习总结(31)——MySql使用建议,尽量避免这些问题
- python逢7过小游戏_while循环拓展:用python做一个逢七过小游戏
- 前端学习 第二弹: JavaScript中的一些函数与对象(1)
- python多重继承super父类参数_Python super()函数使用及多重继承
- 计算机上找不到运行程序怎么办,电脑联网时显示找不到应用程序怎么办
- 基于深度学习的图像超分论文推荐
- C | 运算符、表达式和语句
- Android——UI开发的点点滴滴1