首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >无法处理MYSQL函数中的异常

无法处理MYSQL函数中的异常
EN

Stack Overflow用户
提问于 2020-02-22 01:55:36
回答 3查看 1.5K关注 0票数 0

我不太熟悉MYSQL函数&异常处理。经过所有的研究,我可以在下面提出,但没有任何收获。

如果insert语句执行失败,否则返回1,则尝试返回0。异常被引发而不是被处理。我哪里出问题了?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    CREATE DEFINER=`myusr`@`localhost` FUNCTION `func1`(p1 varchar(50), p2 varchar(6)) RETURNS int(1)
        READS SQL DATA
        DETERMINISTIC
    BEGIN
        DECLARE EXP DATETIME;
        DECLARE RINT INT(1);
        DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
        BEGIN
           RETURN  0;
        END;
        SET exp = DATE_ADD(NOW(), INTERVAL 15 MINUTE);
        INSERT INTO `mydb`.`my_tbl`
            (`C1`,
            `C2`,
            `C3`)
            VALUES
            (p1, p2, exp);
        SET RINT = 1;
        RETURN RINT;
    END

表- my_tbl

成功案例- func1('ABC','123456')

EXCEPTION CASE - func1('ABC','123456789')

编辑-添加了屏幕截图

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-02-22 02:30:32

看来mysql 8.0.19无法捕获所有错误并正确处理它们。

错误代码: 1406。数据太长,不能在第1行的“p2”列中使用

错误代码: 1049。未知数据库“mydb”

我测试了两个例子,但没有成功,其他例子也是如此,我认为这更像是mysql论坛的一个例子。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELIMITER $$
CREATE DEFINER=`mydb`@`localhost` FUNCTION `func1`(p1 varchar(50), p2 varchar(6)) RETURNS int
    READS SQL DATA
    DETERMINISTIC
BEGIN
    DECLARE EXP DATETIME;
    DECLARE RINT INT(1);
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION 
    BEGIn
       RETURN  0;
    END;
    SET exp = DATE_ADD(NOW(), INTERVAL 15 MINUTE);
    INSERT INTO `mydb`.`func1`
        (`C1`,
        `C2`,
        `C3`)
        VALUES
        (p1, p2, exp);
    SET RINT = 1;
    RETURN RINT;
END;
DE§LIMITER ;

这个场景是可行的。我增加了引用变量p2的大小以适应输入的数据,并为错误1265添加了一个退出处理程序,这是在尝试插入长文本时得到的错误。

错误代码: 1265。第1行“c2”列的数据截断

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `func1`(p1 varchar(50), p2 varchar(20)) RETURNS int
    MODIFIES SQL DATA
    DETERMINISTIC
BEGIN
    DECLARE EXP DATETIME;
    DECLARE RINT INT(1);
    BEGIN
    DECLARE EXIT HANDLER FOR 1265 RETURN 0;
    DECLARE CONTINUE HANDLER FOR SQLEXCEPTION RETURN 0;


    SET exp = DATE_ADD(NOW(), INTERVAL 15 MINUTE);
    INSERT INTO `mydb`.`my_tbl`
        (`C1`,
        `C2`,
        `C3`)
        VALUES
        (p1, p2, exp);
        SET RINT = 1;
        RETURN RINT;
    END;    
END$$
DELIMITER ;

所得到的错误,在添加处理程序之前传递错误消息。

票数 1
EN

Stack Overflow用户

发布于 2020-02-22 13:21:15

这里的问题是异常是在异常处理程序之外生成的。在定义异常处理程序之前,将验证发送给该函数的参数。要捕获该异常,需要在调用函数时设置异常处理程序。

如果声明了p2 varchar(20),并保留了列定义varchar(6),则可能会得到所需的行为,因为异常将在异常处理程序所涵盖的代码中触发。

票数 1
EN

Stack Overflow用户

发布于 2020-02-22 09:56:47

TRY语句的作用是捕获异常。(因为这个过程通常包含几个语句,所以通常使用术语“TRY块”而不是“TRY语句”)。如果在TRY块中发生异常,系统中称为异常处理程序的部分将异常传递给程序的另一部分,该部分将处理异常。这个程序部分由关键字CATCH表示,因此称为CATCH块。

备注

使用TRY和CATCH语句进行异常处理是现代编程语言(如C#和Java )处理错误的常见方式。

尝试和捕获块的异常处理给程序员带来了很多好处,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Exceptions provide a clean way to check for errors without cluttering code
Exceptions provide a mechanism to signal errors directly rather than using some side effects
Exceptions can be seen by the programmer and checked during the compilation process

Server 2012引入了与处理错误有关的第三条语句:抛出。此语句允许您抛出在异常处理块中捕获的异常。简单地说,抛出语句是另一个返回机制,它的行为类似于已经描述的RAISEERROR语句。

示例1展示了尝试/捕捉/抛出异常处理是如何工作的。它展示了如何使用异常处理插入批处理中的所有语句,或者在发生错误时回滚整个语句组。此示例基于部门和员工表之间的引用完整性。因此,必须使用主键和外键约束创建两个表。

例1

0270_001

在示例1中执行批处理之后,批处理中的所有三个语句都不会被执行,这个示例的输出是:

0271_001

示例1的执行如下所示。成功执行第一个INSERT语句。然后,第二条语句导致引用完整性错误。因为所有三个语句都是在TRY块中编写的,所以异常将被“抛出”,异常处理程序将启动CATCH块。CATCH回滚所有语句并打印相应的消息。之后,抛出语句将批处理的执行返回给调用者。因此,employee表的内容不会更改。

备注

语句开始事务、提交事务和回滚涉及事务的Transact-SQL语句。这些语句分别启动、提交和回滚事务。关于这些陈述和交易的一般讨论,见第13章。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60350960

复制
相关文章
HTTP、WebSocket、gRPC 或 WebRTC:哪种通信协议最适合您的应用程序?
在为您的应用程序选择通信协议时,有很多不同的选择。在本文中,我们将了解四种流行的解决方案:HTTP、WebSocket、gRPC和WebRTC。我们将通过调查其背后的技术、它的最佳用途及其优缺点来探索每个协议。
用户1418987
2023/10/16
3.2K0
HTTP、WebSocket、gRPC 或 WebRTC:哪种通信协议最适合您的应用程序?
HTTP、WebSocket、gRPC 或 WebRTC:哪种通信协议最适合您的应用程序?
在为您的应用程序选择通信协议时,有很多不同的选择。在本文中,我们将了解四种流行的解决方案:HTTP、WebSocket、gRPC和WebRTC。我们将通过调查其背后的技术、它的最佳用途及其优缺点来探索每个协议。
用户1418987
2023/10/16
1.8K0
HTTP、WebSocket、gRPC 或 WebRTC:哪种通信协议最适合您的应用程序?
在 .NET 应用程序中运行 JavaScript
前几天我在做一个副业,意识到我需要使用一些 JavaScript 功能。一想到要再次处理 Node.js 和 npm,我就完全放弃了,所以我决定研究一下在 .NET 应用程序中运行 JavaScript 的可能性。很疯狂吧?实际上,这出乎意料的简单。
独立观察员
2022/12/06
2.6K0
在 .NET 应用程序中运行 JavaScript
检查 Flutter 应用程序是否在 Web 上运行(书籍推荐)
您可以使用基础kIsWeb常量检查您的 Flutter 应用程序是否在 Web 浏览器上运行。
徐建国
2022/03/30
1.7K0
检查 Flutter 应用程序是否在 Web 上运行(书籍推荐)
gRPC: 如何在 gRPC 服务中添加 HTTP 基本验证?
本文将介绍如何在 gRPC 微服务中添加 API Auth。我们将介绍 Basic Auth,X-API-Key 两种 API Auth 模式。
尹东勋
2021/10/17
2.7K0
gRPC: 如何在 gRPC 服务中添加 HTTP 基本验证?
在WordPress 的文章或页面中运行PHP 代码
如果你在编辑器中输入PHP 代码,默认的话WordPress 不会为你执行这段代码的——只会文本方式输出。Tutsplus 上有一篇文章以插件的方式告知我们实现在WordPress 的文章或页面中运行PHP 代码的方法,下面介绍下。 原理小介绍 懂php 的都知道,PHP中载入其他PHP文件可以用include() 或者 require() 函数,因此为了实现在WordPress 的文章或页面中运行PHP 代码,我们可以将打算运行的代码写入一个额外的PHP 文件中,放在某个目录下,通过某种机制调用。英文原文
Jeff
2018/01/19
4.6K0
在WordPress 的文章或页面中运行PHP 代码
在bash中检测进程是否正在运行
比如我们启动了一个这样的进程python -m SimpleHTTPServer 8000,我们想检测这个进程是否存在,可以这样。
技术小黑屋
2018/09/04
3.6K0
在 CentOS 上使用 Jexus 托管运行 ZKEACMS
张善友
2017/05/22
2.3K0
在 CentOS 上使用 Jexus 托管运行 ZKEACMS
在CentOS上使用Jexus托管运行 ZKEACMS
ZKEACMS Core 是基于 .net core 开发的,可以在 windows, linux, mac 上跨平台运行,接下来我们来看看如何在 CentOS 上使用Jexus托管运行 ZKEACMS,通常我们在Linux部署ASP.NET Core应用,按照微软的官方文档,我们通常需要Nginx 搭配 Systemd (https://docs.microsoft.com/en-us/aspnet/core/publishing/linuxproduction), Nginx并没有接管Kestrel 进
张善友
2018/01/22
1.2K0
在CentOS上使用Jexus托管运行 ZKEACMS
gRPC在Spring Cloud中的应用
在微服务开发中,服务间的调用一般有两种方式:Feign、RestTemplate,但在实际使用过程中,尤其是Feign,存在各种限制及局限性,如:HTTP请求方式、返回类型等限制,有时会让你觉得那那都别扭。在微服务项目中,服务间的调用,是非常普遍频繁的,其性能也不是很理想。
xcbeyond
2020/04/01
5.4K0
gRPC在Spring Cloud中的应用
在Docker中使用nginx托管vue应用程序
首先,我们将使用Vue CLI生成入门Vue应用程序,我们将这个应用命名vue-nginx-docker
公众号: 云原生生态圈
2020/12/31
1.1K0
gRPC在C#中的未来属于grpc-dotnet
grpc-dotnet(Grpc.Net.Client[1]和Grpc.AspNetCore.Server[2] nuget 包)现在是.NET/C#中推荐的 gRPC 实现。最初的 gRPC C#实现(Grpc.Core nuget 包)将进入维护模式,不会得到任何新功能,只会收到重要的错误修复和安全修复。最终的计划是在未来的某个时候逐步完全淘汰 Grpc.Core。该公告描述了我们决定这样做的原因,并更详细地列出了该计划。
CNCF
2021/05/07
2.1K0
ChatGPT初体验|在 ChatGPT 中运行容器或Kubernetes?
The OpenAI API can be applied to virtually any task that involves understanding or generating natural language or code. We offer a spectrum of models with different levels of power suitable for different tasks, as well as the ability to fine-tune your own custom models. These models can be used for everything from content generation to semantic search and classification.
DevOps云学堂
2022/12/29
1.8K1
ChatGPT初体验|在 ChatGPT 中运行容器或Kubernetes?
2 - 哪里可以运行 JavaScript?
原文:https://dev.to/bhagatparwinder/where-can-i-run-javascript-995
前端黑板报
2022/04/19
1.4K0
2 - 哪里可以运行 JavaScript?
cloudbase-init用户是否可以禁用或删除
cloudbase-init是初始化程序,涉及很多功能,比如购买机器时、重装系统时、重置密码时指定的密码的生效,购买机器时、重装系统时指定的hostname的生效,购买机器时指定的userdata的生效等重要功能。
Windows技术交流
2021/09/28
4.7K0
java虚拟机可以运行的文件_虚拟机的网络模型有
类的实例(不包括局部变量与方法参数)都存储在Java堆 堆用于存储对象实例,比如通过 new创建的对象实例就保存在堆中,堆中的对象的由垃圾回收器负责回收。
全栈程序员站长
2022/09/29
8300
java虚拟机可以运行的文件_虚拟机的网络模型有
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有一些问题的。在局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。 gRPC默认使用protobuf,它更快,因为它是二进制的且是类型安全的。我编写了一个演示项目,使用JSON over HTTP与使用gRPC API的方式进行了一次基准测试。 该库包含2个相同的API:基于Protobuf的gRP
李海彬
2018/03/28
3.1K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有一些问题的。在局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。
石瞳禅
2018/09/18
1.7K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
讨论在 Linux Control Groups 中运行 Java 应用程序的暂停问题
本篇原文来自 LinkedIn 的 Zhenyun Zhuang,原文:Application Pauses When Running JVM Inside Linux Control Groups[1],在容器化的进程中,或多或少会给现有应用程序带来一些问题,这篇文章讲的是 LinkedIn 在使用 cgroups 构建容器化产品过程中,发现资源限制策略对 Java 应用程序性能会产生一些影响,文章深入分析问题根本原因,并给出解决方案。笔者看过后,觉得非常赞,因此翻译后献给大家,希望对大家有帮助。
涤生
2019/05/15
2.3K0
点击加载更多

相似问题

Appengine托管虚拟机部署失败

11

在HTTP1.1内核中是否可以使用gRPC?

45

是否可以在虚拟机上运行IPhone应用程序

40

在托管虚拟机的本地开发环境中运行web应用程序时出现appengine.NewContext错误

13

托管虚拟机是否可以滚动更新?

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文