savepoint 与raise_application_error结合应用

2023-10-12 02:58

本文主要是介绍savepoint 与raise_application_error结合应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在IFS ERP中经常使用Error_SYS包进行处理异常,比如 

  IF front_mark_no_ IS NULL OR side_mark_no_ IS NULL THEN
Error_Sys.Record_General( lu_name_, 'DJ_CUSTMARKNULL: Order No :P1 Front Mark Or Side Mark No Is Null, Not Allow Release !',
order_no_ );
END IF;
打开过程Error_Sys.Record_General过程
PROCEDURE Record_General (
lu_name_  IN VARCHAR2,
err_text_ IN VARCHAR2,
p1_       IN VARCHAR2 DEFAULT NULL,
p2_       IN VARCHAR2 DEFAULT NULL,
p3_       IN VARCHAR2 DEFAULT NULL )
IS
BEGIN
text_ := Nls_Msg___(lu_name_, err_text_, p1_, p2_, p3_);
raise_application_error(-20110, lu_name_||'.'||text_);
END Record_General;

可以看到raise_application_error抛给客户端的错误信息,由于IFS ERP客户端封装好相关事务,故碰到任何Error_Sys返回的错误消息都回滚.

现在简单介绍一下raise_application_error相关事项:
1、raise_application_error内建函数用于抛出一个异常并给异常赋予一个错误号以及错误信息;
2、raise_application_error函数能够在pl/sql程序块的执行部分和异常部分调用,显式抛出带特殊错误号的命名异常;
3、使用语法:raise_application_error(error_no,error_message[,{true|| false}]);
4、错误号的范围是-20,001到-20,999;错误信息是文本字符串,最多为2048字节;true和false表示是添加(true)进错误堆(error stack)还是覆盖(overwrite)错误堆(false)。缺省情况下是false。
从raise_application_error和savepoint结合事务使用,可以由raise_application_error返回业务逻辑判断的信息给客户端,这样只需在数据库操作业务

DECLARE  
forwarder_no_  VARCHAR2(30);
BEGIN  
SAVEPOINT a_work;  
forwarder_no_ := 'A';
INSERT  
INTO dj_forwarder_info_tab (  
forwarder_no,--主键   
cust_description,  
description,  
tel,  
fax,  
link_man,  
email,  
msn,  
note_text,  
rowversion)  
VALUES (  
forwarder_no_,  
'test',  
'test',  
'test',  
'test',  
'test',  
'test',  
'test',  
'test',  
SYSDATE); 
---业务逻辑上的判断       
IF forwarder_no_ = 'A' THEN
raise_application_error(-20140, '1.已存在该货贷号');  
END IF;  
--
forwarder_no_ := 'AB';
INSERT  
INTO dj_forwarder_info_tab (  
forwarder_no,  
cust_description,  
description,  
tel,  
fax,  
link_man,  
email,  
msn,  
note_text,  
rowversion)  
VALUES (  
forwarder_no_,----主键重复添加A,发生错误   
'test',  
'test',  
'test',  
'test',  
'test',  
'test',  
'test',  
'test',  
SYSDATE); 
---业务逻辑上的判断
IF forwarder_no_ = 'A' THEN
raise_application_error(-20140, '2.已存在该货贷号');  
END IF;  
COMMIT;  
EXCEPTION  
WHEN OTHERS THEN  
dbms_output.put_line(SQLERRM);  
ROLLBACK TO a_work; ---回滚事务,添加不成功         
COMMIT;  
END Import_Inv_Part;  

这篇关于savepoint 与raise_application_error结合应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/192747

相关文章

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

Android Kotlin 高阶函数详解及其在协程中的应用小结

《AndroidKotlin高阶函数详解及其在协程中的应用小结》高阶函数是Kotlin中的一个重要特性,它能够将函数作为一等公民(First-ClassCitizen),使得代码更加简洁、灵活和可... 目录1. 引言2. 什么是高阶函数?3. 高阶函数的基础用法3.1 传递函数作为参数3.2 Lambda

Java中&和&&以及|和||的区别、应用场景和代码示例

《Java中&和&&以及|和||的区别、应用场景和代码示例》:本文主要介绍Java中的逻辑运算符&、&&、|和||的区别,包括它们在布尔和整数类型上的应用,文中通过代码介绍的非常详细,需要的朋友可... 目录前言1. & 和 &&代码示例2. | 和 ||代码示例3. 为什么要使用 & 和 | 而不是总是使

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

python中time模块的常用方法及应用详解

《python中time模块的常用方法及应用详解》在Python开发中,时间处理是绕不开的刚需场景,从性能计时到定时任务,从日志记录到数据同步,时间模块始终是开发者最得力的工具之一,本文将通过真实案例... 目录一、时间基石:time.time()典型场景:程序性能分析进阶技巧:结合上下文管理器实现自动计时

Java逻辑运算符之&&、|| 与&、 |的区别及应用

《Java逻辑运算符之&&、||与&、|的区别及应用》:本文主要介绍Java逻辑运算符之&&、||与&、|的区别及应用的相关资料,分别是&&、||与&、|,并探讨了它们在不同应用场景中... 目录前言一、基本概念与运算符介绍二、短路与与非短路与:&& 与 & 的区别1. &&:短路与(AND)2. &:非短

Python结合Flask框架构建一个简易的远程控制系统

《Python结合Flask框架构建一个简易的远程控制系统》这篇文章主要为大家详细介绍了如何使用Python与Flask框架构建一个简易的远程控制系统,能够远程执行操作命令(如关机、重启、锁屏等),还... 目录1.概述2.功能使用系统命令执行实时屏幕监控3. BUG修复过程1. Authorization