首先根据这篇文章:http://www.cnblogs.com/coolzdp/p/7717332.html
我们知道存储过程中 SELECT
*
INTO 如果没有记录是不会往下执行的,直接抛出NO_DATA_FOUND异常,
这个在plsql developer中直接测试执行没问题,会报ORA-1403异常。
但是在mybatis中调用的话就不会抛出NO_DATA_FOUND异常,而是在select * into语句为空时默默的终止执行该过程。
在服务层采用事务处理的话就有问题了,服务层调用 select * into为空的存储过程处理逻辑肯定是有毛病的,本来应该抛出异常扔给控制器层,
现在只是终止了,后面的语句还会执行,这样就不对了。
我猜测是mybatis针对NO_DATA_FOUND异常
做了过滤,捕获后不再抛出了。
我的处理方法就是如果有select into, 在plsql过程最后手动捕获NO_DATA_FOUND异常
,抛出自定义异常:
EXCEPTION
WHEN NO_DATA_FOUND THEN
raise_application_error('-20000', 'select into没找到数据');
如果是那种需要提示给用户指出select into必须有记录的原因那么就老老实实的用下面的语句吧:
SELECT COUNT(*) INTO v_playVoyageCount FROM PLAN_VOYAGE
WHERE VESSEL_ID_ = p_vesselId AND SAILING_DATE_ = to_date(p_sailDate, 'yyyy-mm-dd');
IF v_playVoyageCount = 0
THEN
raise_application_error(-20000, 'no record');
END IF;
参考这篇文章:https://www.cnblogs.com/zhangxsh/p/3494340.html
实际上这篇文章并不是针对mybatis中调用存储过程不报NO_DATA_FOUND异常
,而是针对
在 select fn_test('1') from dual; SQL中调用函数返回null终止而不抛NO_DATA_FOUND
异常。
区别是这个是oracle自身的处理,上面的是mybatis的处理。
mybatis 调用 oracle 存储过程 select into 无记录时NO_DATA_FOUND异常处理分析的更多相关文章
-
MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...
-
springboot+mybatis调用oracle存储过程
1 存储过程参数为VARCHAR 代码逻辑:controller层定义实体类对象entity,并entity.set给存储过程的输入参数赋值,把赋值后的实体类通过service层传到dao层,然后通过 ...
-
[转].net 调用oracle存储过程返回多个记录集
本文转自:http://www.netwinform.com/articleinfo.aspx?id=17 存储过程: CREATE OR REPLACE PROCEDURE p_query_cs ( ...
-
mybatis 调用oracle存储过程如何返回out参数值
调试了半天,其实整体用map传入传出也挺简单, 主要是调用存储过程 select标签里平时习惯不写 statementType="CALLABLE",调用没有out参数时也能正常用 ...
-
mybatis调用oracle存储过程的几个参考例子
首先写一个存储过程: create or replace procedure p_syn_equipment_20161205 is sqlstr ); begin --清空表 sqlstr := ' ...
-
mybatis调用oracle存储过程例子.
1.MYBATIS方法: <select id="getFlowNum" statementType="CALLABLE"> <![CDATA ...
-
mybatis调用oracle存储过程 out游标类型参数 如何赋给java map
<resultMap id="ticketInfosResultMap" type="Map"> <!--result要是默认用列名的话完全不 ...
-
Mybatis调用PostgreSQL存储过程实现数组入参传递
注:本文来源于 < Mybatis调用PostgreSQL存储过程实现数组入参传递 > 前言 项目中用到了Mybatis调用PostgreSQL存储过程(自定义函数)相关操作,由于Pos ...
-
123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集
c#调用oracle存储过程返回数据集 2008-12-20 10:59:57| 分类: net|字号 订阅 CREATE OR REPLACE PACKAGE pkg_tableTypeIS ...
随机推荐
-
MEF入门之不求甚解,但力求简单能讲明白(二)
在上一篇文章中,我们已经学到了很基本的MEF概念和使用方法. 但我们导出的是一个object类型的实例,只能用来tostring,没有引用部件类库,也不能用里面的成员方法. 本篇,我们逐渐往简单的文件 ...
-
.NET使用ZXing.NET生成中间带图片的二维码
很久之前就有写这样的代码了,只是一直没记录下来,偶然想写成博客. 把之前的代码封装成函数,以方便理解以及调用. 基于开源的 ZXing.NET 组件,代码如下: 先添加对ZXing.NET的引用,然后 ...
-
java8新特性全面解析
在Java Code Geeks上有大量的关于Java 8 的教程了,像玩转Java 8--lambda与并发,Java 8 Date Time API 教程: LocalDateTime和在Java ...
-
重拾C,一天一点点_12
连续两天没写了,今天继续! sizeof 对象 或 sizeof (类型名) 返回一个整型值,等于指定对象或类型占用的存储空间字节数.(返回值是无符号整型值,其类型为size_t,在头文件<st ...
-
springMVC与struts2的区别
1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能:spring会稍微比struts快.spring mvc是基于方法的设 ...
-
spring-security 配置文件
转自:spring-security学习笔记--配置文件 <?xml version="1.0" encoding="UTF-8"?> <be ...
-
关于data-xxx属性大小写不敏感,不识别大写的几点总结
1.所有标签属性,没有大小写区分,都是小写,如:data-userID,在输出后会变成data-userid,前者只能获取到'undefined'. 2.dataset 自动把 - 转换为驼峰.类似的 ...
-
虚函数&;多态
对于经常被问到的虚函数和多态的问题,发现百度百科回答得十分详细,所以自己在百度百科上的解释进行总结 一.虚函数 (1)虚函数简介:在某基类中声明为virtual并在一个或者多个派生类中被重新定义的成员 ...
-
python字符串常用操作
#### 1) 判断类型 - 9 | 方法 | 说明 || --- | --- || string.isspace() | 如果 string 中只包含空格,则返回 True | | string.i ...
-
Apache服务器301重定向去掉.html和.php
在做优化网站的时候,会考虑到网站整站的集权: 考虑到网站可以生成静态,首先,让网站优先访问 index.html 之后考虑:去掉 .html 和 .php. 利用 .htaccess <IfMo ...