mysql带入参的存储过程_MySQL带参数的存储过程小例子

2023-10-29

http://wwty.iteye.com/blog/698239

mysql存储过程也提供了对异常处理的功能:通过定义HANDLER来完成异常声明的实现

语法如下:

DECLARE handler_type HANDLER FOR condition_value[,...] sp_statement handler_type: CONTINUE | EXIT condition_value: SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION | mysql_error_code

Handlers类型:

1, EXIT: 发生错误时退出当前代码块(可能是子代码块或者main代码块)

2, CONTINUE: 发送错误时继续执行后续代码

condition_value:

condition_value支持标准的SQLSTATE定义;

SQLWARNING是对所有以01开头的SQLSTATE代码的速记

NOT FOUND是对所有以02开头的SQLSTATE代码的速记

SQLEXCEPTION是对所有没有被SQLWARNING或NOT FOUND捕获的SQLSTATE代码的速记

除了SQLSTATE值,MySQL错误代码也被支持

但是对于mysql而言,优先级如下:

MySQL Error code > SQLSTATE code > 命名条件

使用SQLSTATE还是MySQL Error Code?

1,SALSTATE是标准,貌似会更portable,但是实际上MySQL、DB2、Oracle等等的存储程序语法大相径庭,所以portable的优势不存在2,MySQL error code与SQLSTATE并不是一一对应的,比如很多MySQL error code都映射到同一SQLSTATE code(HY000)

当MySQL客户端碰到错误时,它会报告MySQL error code和相关的SQLSATE code:

mysql > CALL nosuch_sp();

ERROR 1305 (42000): PROCEDURE sqltune.nosuch_sp does not exist

具体的sqlsdate和mysql error code的对应可以在http://dev.mysql.com/doc/的MySQL reference manual的附录B找到完整的最新的error codes

condition_name:命名条件

MySQL error code或者SQLSTATE code的可读性太差,所以引入了命名条件:

语法:

Java代码  

DECLARE condition_name CONDITION FOR condition_value

condition_value:

SQLSTATE [VALUE] sqlstate_value

| mysql_error_code

使用:

Java代码  

# original

DECLARE CONTINUE HANDLER FOR 1216 MySQL_statements;

# changed

DECLARE foreign_key_error CONDITION FOR 1216;

DECLARE CONTINUE HANDLER FOR foreign_key_error MySQL_statements;

用condition_name为错误代码起了个别名。

示例1:Duplicate entry Handler

Sql代码  

CREATE PROCEDURE sp_add_location

(in_location    VARCHAR(30),

in_address1    VARCHAR(30),

in_address2    VARCHAR(30),

zipcode        VARCHAR(10),

OUT out_status VARCHAR(30))

BEGIN

DECLARE CONTINUE HANDLER

FOR 1062

SET out_status='Duplicate Entry';

SET out_status='OK';

INSERT INTO locations

(location,address1,address2,zipcode)

VALUES

(in_location,in_address1,in_address2,zipcode);

END;

示例2: Last Row Handler

Sql代码  

CREATE PROCEDURE sp_not_found()

READS SQL DATA

BEGIN

DECLARE l_last_row INT DEFAULT 0;

DECLARE l_dept_id INT:

DECLARE c_dept CURSOR FOR

SELECT department_id FROM departments;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET l_last_row=1;

OPEN c_dept;

dept_cursor: LOOP

FETCH c_dept INTO l_dept_id;

IF (l_last_row=1) THEN

LEAVE dept_cursor;

END IF;

END LOOP dept_cursor;

CLOSE c_dept;

END;

综合示例:

Sql代码  

CREATE PROCEDURE sp_add_department

(p_department_name     VARCHAR(30),

p_manager_surname     VARCHAR(30),

p_manager_firstname   VARCHAR(30),

p_location            VARCHAR(30),

OUT p_sqlcode         INT,

OUT p_status_message  VARCHAR(100))

BEGIN

/* START Declare Conditions */

DECLARE duplicate_key CONDITION FOR 1062;

DECLARE foreign_key_violated CONDITION FOR 1216;

/* END Declare COnditions */

/* START Declare variables and cursors */

DECLARE l_manager_id INT;

DECLARE csr_mgr_id CURSOR FOR

SELECT employee_id FROM employees

WHERE surname=UPPER(p_manager_surname)

AND firstname=UPPER(p_manager_firstname);

/* END Declare variables and cursors */

/* START Declare Exception Handlers */

DECLARE CONTINUE HANDLER FOR duplicate_key

BEGIN

SET p_sqlcode=1052;

SET p_status_message='Duplicate key error';

END;

DECLARE CONTINUE HANDLER FOR foreign_key_violated

BEGIN

SET p_sqlcode=1216;

SET p_status_message='Foreign key violated';

END;

DECLARE CONTINUE HANDLER FOR NOT FOUND

BEGIN

SET p_sqlcode=1329;

SET p_status_message='No record found';

END;

/* END Declare Exception Handlers */

/* START Execution */

SET p_sqlcode=0;

OPEN csr_mgr_id;

FETCH csr_mgr_id INTO l_manager_id;

IF p_sqlcode<>0 THEN     /* Failed to get manager id */

SET p_status_message=CONCAT(p_status_message,' when fetching manager id');

ELSE                     /* Got manager id, we can try and insert */

INSERT INTO departments (department_name, manager_id, location)

VALUES(UPPER(p_department_name), l_manager_id, UPPER(p_location));

IF p_sqlcode<>0 THEN /* Failed to insert new department */

SET p_status_message=CONCAT(p_status_message, ' when inserting new department');

END IF;

END IF;

CLOSE csr_mgr_id;

/* END Execution */

END

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql带入参的存储过程_MySQL带参数的存储过程小例子 的相关文章

  • 支持向量回归删除异常值Python

    1 支持向量回归 SVR 原理 支持向量回归 Support Vector Regression SVR 不仅可以用于预测 还可以用于异常值检测 其基本思路是训练一个回归模型 通过对每个数据点进行预测 并计算其预测残差 来判断该数据点是否为
  • 利用树莓派3和RTL-SDR V3搭建一个低成本的QRP小功率监测点

    TUTORIAL SETTING UP A LOW COST QRP FT8 JT9 WSPR ETC MONITORING STATION WITH AN RTL SDR V3 AND RASPBERRY PI 3 QRP是无线电通讯简语
  • centos7中安装docker,并安装mysql5.7

    参考地址 https www runoob com docker centos docker install html centos7中安装docker Docker从1 13版本之后采用时间线的方式作为版本号 分为社区版CE和企业版EE
  • python做项目管理_python项目实现配置统一管理的方法

    一个比较大的项目总是会涉及到很多的参数 最好的方法就是在一个地方统一管理这些参数 最近看了不少的python项目 总结了两种很有意思的配置管理方法 第一种 基于easydict实现的配置管理 首先需要安装numpy easydict以及ya
  • HCIP第十天作业

    要求及拓扑图 第一步 配IP 给AS2上的路由各配两个环回 其中一个是建邻用的 其他按正常配 第二步 给AS2上的路由配一个OSPF协议 并且将用户环回改成广播通信 第三步 起BGP协议 R1 R8直连 64512跟64513是两个联邦 所
  • 2.比较运算符逻辑运算符

    比较运算符逻辑运算符 比较运算符 比较运算符 gt 大于 lt 小于 等于 gt 大于等于 lt 小于等于 不等于 注 Infinity Infinity NaN NaN 比较结果为true或者false 字符串比较时是比较ASCII码的值
  • SaaS部署和私有化部署的区别及各自的优点

    以前开发一个软件如果想要在企业内运行就必须要安装在本地的服务器上 这就导致企业除了需要支付软件开发的费用之外 还需要支付服务器的费用 但是随着软件开发技术的不断发展 现在很多软件都不需要安装服务器用户通过互联网就能够访问到软件获得服务 这就
  • S7-1500项目案例程序,带5个S7-1200轮询,5个ET200SP

    S7 1500项目案例程序 带5个S7 1200轮询 5个ET200SP 博图软件编程 PTO脉冲模式控制20个轴 100个气缸 与2台机器人联动 采用ModbusRTU 485通讯 PROFINET IO智能通讯 PTP RS232自由口
  • 怎么查服务器的配置信息,怎么查自己服务器的配置信息

    怎么查自己服务器的配置信息 内容精选 换一换 精简视图提供了云服务器资源概况和状态的可视化统计结果 帮助您直观的了解云服务器资源 在精简视图中 您可以快速获取弹性云服务器基本信息 登录信息 配置信息 监控信息 精简视图提供了云服务器资源概况
  • git clone 报错SSL connect error

    在一台centos上搭建frp的时候遇到了这个问题 做下记录 问题提示 fatal unable to access https github com fatedier frp git SSL connect error 原因 缺少相应的库
  • 关于PHPstorm打开laravel的代码提示的工具的方法

    关于PHPstorm打开laravel的代码提示的工具的方法 1 composer 安装 composer require barryvdh laravel ide helper 2 生成模型的工具 php artisan ide help
  • vlc集成c#_c#的一个视频播放库的封装-VLC.DotNet

    VLC的强大是众所周知的 如果你不知道 那你现在就知道了 FFMPEG和VLC的关系 VLC调用了FFMPEG的库 FFMPEG和libav的关系 libav是FFMPEG的开发人员中独立出来一部分后创建的一个新的工程 以上都是段子 没有深
  • QT 鼠标形状设置

    QT提供了十分便捷的设置鼠标形状的方法 在QT界面的根类QWidget中有QCursor cursor void setCursor QCursor void unsetCursor 三个方法 因而对于一切直接或间接继承自QWidget的控
  • Java缓存 @上源码

    用途 提高响应速度 减轻后台处理负担 分类 1 前端 客户端浏览器缓存 CDN加速 代理服务器缓存 nginx 2 后端 本地缓存 Guava Cache Ehcache 分布式缓存 Memcache Redis 数据库缓存 按照存放介质类
  • 奥的斯服务器故障显示m什么意思,奥迪斯电梯故障代码对照表 奥的斯电梯故障解决方法...

    刚从事电梯维保行业 我们除了培训中系统的学习外 实践中总结出来的窍门和技巧同样重要 当我们所见的故障案例和维修的电梯比较多的时候 经验及自然来了 这就是我们经常说熟能生巧 下面是diantijob小编整理的关于奥的斯电梯常见的故障代码和故障
  • h5移动端,通过监听路由回退事件关闭弹窗

    最近在做一个商城项目 项目设计是在移动端浏览器上使用 目前先不内嵌在app内部 在做商品详情页的时候 也调研了其他的app交互 其中有一个交互是在商品详情页 点击当前商品包含的服务详情按钮 会弹窗 点击返回按钮或者手机自带的返回 会关闭弹窗
  • 前后端分离--用户注册功能的实现

    爱旅行 用户注册 Object Obj application getAttribute active itripUser getUserCode 不能 toString 可能obj的值为空 就会出现异常 String activeCode
  • matlab最小分类错误全局二值化算法

    转自 http download csdn net detail hupeng810 1511870 function imagBW kittlerMet imag KITTLERMET binarizes a gray scale ima
  • git clone 遇到问题:fatal: unable to access ‘https://github.comxxxxxxxxxxx‘: Failed to connect to xxxxxxx

    git clone 遇到问题 fatal unable to access https github comxxxxxxxxxxx Failed to connect to xxxxxxxxxxxxx

随机推荐

  • ContOS7镜像下载与安装

    contos7的安装 文章目录 contos7的安装 一 镜像下载 二 安装 一 镜像下载 官网下载链接 http isoredirect centos org centos 7 isos x86 64 阿里云镜像站点 http mirro
  • Vite跨域设置

    Vite跨域设置 步骤一 vite config ts配置 proxy 跨域代理 apis target http env VUE APP BASE API target http url port changeOrigin true re
  • 一起学nRF51xx 6 - uart

    前言 通用异步接收器 发送器提供快速 全双工 内置流量控制的异步串行通信 CTS RTS 在硬件方面支持高达1Mbps波特率 支持奇偶校验和第9位数据生成 用于每个UART接口线的GPIO可从芯片上的GPIO中任选 而且可独立配置 这使得芯
  • CentOS8基础篇3:使用vim编辑文档

    一 vim编辑器 vim 编辑器共有三种工作模式 分别是命令模式 输入模式和末行模式 例2 24 使用vim编辑器创建并编辑文件hello c 二 查看文件内容命令 1 more less 浏览文件全部内容 当文件内容过多时 可以用more
  • 2.2析取范式与合取范式

    2 2析取范式与合取范式 本节给出命题公式的两种规范表示方法 这种规范的表达式能表达真值表所能提供的一切信息 定义2 2命题变项及其否定统称作文宇 仅由有限个文字构成的析取式称作简单析取式仅由有限个文字构成的合取式称作简单合取式 P g p
  • [正能量系列]失业的程序员(三)

    注 本文原型为作者的好友们 全文不完全代表作者本人的意图 本系列前两章 失业的程序员 一 二 一 这段时间我去参加了一个管理培训班 说实话去之前真的很痛苦 我一向认为那些都是骗人的玩意儿 在qq上找我学姐吐槽 说现在的广告真烦 搞这么多培训
  • Qt注册自定义类型

    一 自定义类型注册必要性 如果要在Qt信号槽中使用自定义类型 需要注意使用qRegisterMetaType对自定义类型进行注册 当然在不跨线程时使用自定义类型signal slot来传递 可能不会出现什么问题 一旦涉及跨线程就很容易出错
  • SPSS(基础篇09)--拆分数据文件

    拆分数据文件 文章目录 拆分数据文件 前言 1 在原始文件中拆分 1 1 拆分文件 比较组 1 2 拆分文件 按组来组织输出 1 3 其它用法 2 直接存储为多层 拆分结果单独存为文件 前言 导语 拆分文件是一种很常见的操作 比如 一个数据
  • 关于loss.backward()函数反向传播时叶子节点被释放

    之前写代码的时候遇到的一个问题 一直没有解决 后来稀里糊涂的解决了 我也不知道原因 这里贴出来 希望大家遇到这个问题的时候能有些启发 图来自网上搜索 由于问题是很久以前的了 当时没有保存截图 抱歉了 这个问题的出现其实可以将 loss ba
  • spring-aop组件详解——TargetSource目标源

    TargetSource 目标源 是被代理的target 目标对象 实例的来源 TargetSource被用于获取当前MethodInvocation 方法调用 所需要的target 目标对象 这个target通过反射的方式被调用 如 me
  • [工业互联-19]:如何在QT中增加SOEM主站

    目录 第1章 基本步骤 第2章 详细步骤 2 1 QT安装 2 2 VS安装 2 3 Win10 Debuggers 2 4 QT配置 2 5 SOEM移植 lib库生成 2 文件移植 文件整理 第1章 基本步骤 要在QT中添加SOEM主站
  • jsp 实现在线人数统计

    首先写个类 import javax servlet import javax servlet http public class SessionCounter implements HttpSessionListener private
  • Xcode7.1环境下上架iOS App到AppStore 流程 (Part 三)

    前言部分 part三 部分主要讲解 Xcode关联绑定发布证书的配置 创建App信息 使用Application Loader上传 ipa文件到AppStore 一 Xcode配置发布证书信息 1 给应用绑定App ID并添加Team账号
  • 爬取某网站的内容、得不到html页面的内容

    Python爬取 1 爬取内容 对某网站内容与热度进行爬取 分析 我们所需的数据是热搜榜的1 10 第一个数据pass divs html xpath div class wbpro side card7 div position gt 1
  • npm init @vitejs/app 初始化项目报错

    我的解决办法在红色加粗的那里 仅供参考 npm init vitejs app vitejs create app is deprecated use npm init vite instead C Users AppData Local
  • List排序 Sort的用法

    目录 1 简要说明 2 官方文件 3 举例说明 3 1 默认排序Sort 3 2Sort IComparer comparer 3 3Sort Comparison comparison 3 4Sort int index int coun
  • C++11新特性之右值引用

    目录 前文 一 什么是右值引用 二 左值引用和右值引用比较 三 右值引用的应用场景以及作用 四 右值引用左值的场景分析 五 完美转发 总结 前文 在C 98标准后 C 11标准的更新为C 注入了新活力 C 11新加了140多个新特性 我们这
  • C#反射Activator

    一 反射的定义与使用场景 反射是指程序可以访问 检测和修改它本身状态或行为的一种能力 程序集包含模块 而模块包含类型 类型包含成员 反射提供了封装程序集 模块和类型的对象 Type类型 可以使用反射动态创建类型的实例 将类型绑定到现有对象
  • 【自己创建分词器tokenizer】(2)——BPE tokenizer

    自己创建分词器 WordPiece tokenizer 自己创建分词器 BPE tokenizer 自己创建分词器 Unigram tokenizer 1 整体步骤 分词包括以下几个步骤 标准化 Normalization 对文本进行必要的
  • mysql带入参的存储过程_MySQL带参数的存储过程小例子

    http wwty iteye com blog 698239 mysql存储过程也提供了对异常处理的功能 通过定义HANDLER来完成异常声明的实现 语法如下 DECLARE handler type HANDLER FOR condit