MySQL存储过程编程教程读书笔记-第二章MySQL存储过程编程指南-存_MySQL
bitsCN.com
MySQL存储过程编程时一个复杂的主题,我们将在本章中为你提供完成基本任务的内容,其中包括:
1、怎样创建存储过程
2、存储过程怎样进行输入输出
3、怎样和数据库交互
4、怎样用MySQL存储编程语言创建过程,函数和触发器
第一个存储过程实例:
delimiter $$drop procedure if exists HelloWorld$$create procedure HelloWorld()begin select "Hello World";end $$变量
本地变量可以用declare语句进行声明。变量名称必须遵循MySQL的列明规则,并且可以使MySQL内建的任何数据类型。你可以用default字句给变量一个初始值,并且可以用SET语句给变量赋一个新值
delimiter $$drop procedure if exists variable_demo$$begin declare my_integer int; declare my_big_integer bigint; declare my_currency numeric(8, 2); declare my_pi float default 3.1415926; declare my_text text; declare my_dob date default '1960-06-21'; declare my_varchar varchar(30) default "Hello World!"; set my_integer = 20; set my_big_integer = power(my_integer, 3);end $$delimiter;
参数
参数可以使我们的存储程序更为灵活,更为实用。参数包括IN(只读模式), INOUT(可读写模式)和OUT(只写模式)。IN模式作为缺省的参数模式。
IN:任何对于该参数的修改都不会返回给调用它的程序
OUT:这个模式意味着存储过程可以对参数赋值(修改参数的值),并且这个被修改的值会被返回给它的调用程序
INOUT:这个模式意味着存储过程即可读取传入的参数,而且任何对于该参数的修改对于它的调用程序而言都是可见的
对于存储函数而言,只能使用IN模式
delimiter $$drop procedure if exists my_sqrt$$create procedure my_sqrt(input_number int, out out_number float)begin set out_number = SQRT(input_number);end $$delimiter;
call my_sqrt(12, @out_value) $$select @out_value $$条件执行
通过购买量的多少来计算出贴现率的存储程序,购买量超过$500可以返回20%,购买量超过$100可以返回10%。
delimiter $$drop procedure if exists discounted_price$$create procedure discounted_price(normal_price NUMERIC(8, 2), out discount_price NUMBERIC(8, 2))begin if (normal_price > 500) then set discount_price = normal_price*.8; else if (normal_price > 100) then set discount_price = normal_price*.9; else set discount_price = normal_price; end if;end$$delimiter;循环
MySQL存储程序语言提供了三种类型的循环
使用LOOP和END LOOP字句的简单循环
当循环条件为真时继续执行的循环,使用WHILE和END WHILE字句
循环直至条件为真,使用REPEAT和UNTIL字句
在这三种循环中,你都可以使用LEAVE字句来终止循环
DELIMITER $$DROP PROCEDURE IF EXISTS simple_loop$$CREATE PROCEDURE simple_loop()BEGIN DECLARE counter INT DEFAULT 0; my_simple_loop: LOOP SET counter = counter 1; IF counter = 10 THEN LEAVE my_simple_loop; END IF; END IF;END LOOP my_simple_loop;select "I can count to 10";END$$ DELIMITER;错误处理
1、如果你认为内嵌的SQL语句会返回空记录,或者你想用游标捕获SELECT语句所返回的记录,那么一个NO FOUND 错误处理可以防止存储过程过早的被终止
2、如果你认为SQL语句可能返回错误(比如违背约束条件),你可以创建一个错误处理来阻止程序终止。这个处理将代替你的默认错误处理并继续程序的执行。
和数据库交互
大多数存储过程包含了各种和数据库表的交互,它们包括四种主要的交互:
1、将一个SQL语句所返回的单个记录放入本地变量中。
2、创建一个“游标”来迭代SQL语句所返回的结果集
3、执行一个SQL语句,将执行后的结果集返回给它的调用程序
4、内嵌一个不反悔结果集的SQL语句,如INSERT,UPDATE, DELETE等
对本地变量使用SELECT INTO
当需要在单个记录数据中获取查询信息,你就可以使用SELECT INTO 语法(无论是使用单个记录,多个记录的混合数据,还是多个表连接)。在这种情况下,你可以再SELECT语句中跟随一个INTO子句,告诉MySQL得到的查询数据返回给谁
DELIMITER $$ DROP PROCEDURE IF EXISTS customer_sales $$ CREATE PROCEDURE customer_sales(int_customer_id INT) READS SQL DATA BEGIN DECLARE total_sales NUMERIC(8, 2); SELECT SUM(sale_value) INTO total_sales FROM sales WHERE customer_id = in_customer_id; SELECT CONCAT('Total sales for ', in_customer_id, 'is', 'total_sales'); END; $$
使用游标
SELECT INTO 定义了单记录查询,但是很多应用程序要求查询多记录数据,你可以使用MySQL中的游标来实现这一切,游标允许你将一个或更多的SQL结果集放进存储程序变量中,通常用来执行结果集中各个单记录的处理。
DELIMITER $$ DROP PROCEDURE cursor_example() READ SQL DATA BEGIN DECLARE l_employee_id INT; DECLARE l_salary NUMERIC(8, 2); DECLARE l_department_id INT; DECLARE done INT DEFAULT 0; DECLARE curl CURSOR FOR SELECT employee_id, salary, department_id FROM employees; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN curl; emp_loop : LOOP FETCH curl INTO l_employee_id, l_salary, l_department_id; IF done = 1 THEN LEAVE emp_loop; END IF; END LOOP emp_loop;
END;$$ bitsCN.com

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

本站6月24日消息,在6月21日HDC2024华为开发者大会主题演讲上,华为终端BG软件部总裁龚体正式官宣了华为自研仓颉编程语言。该语言历经5年研发沉淀,现已开启开发者预览。华为开发者官网现已推出仓颉编程语言官方入门教程视频,方便开发者初步上手理解。该教程将带用户体验仓颉、学习仓颉、应用仓颉,包括用仓颉语言估算圆周率、计算2024年各月的干支纪法、看到二叉树在仓颉语言中的N种表达方式,以及用枚举类型实现代数计算、用接口和扩展实现信号系统模拟,还有用仓颉宏扩展出新语法等等。本站附教程访问地址:ht

本站6月21日消息,在今日下午的HDC2024华为开发者大会上,华为终端BG软件部总裁龚体正式官宣了华为自研仓颉编程语言,并发布了HarmonyOSNEXT仓颉语言开发者预览版。这是华为首次公开发布仓颉编程语言。龚体表示:“2019年,仓颉编程语言项目在华为诞生,历经5年研发沉淀,大量研发投入,今日终于和全球开发者见面。仓颉编程语言通过现代语言特性的集成、全方位的编译优化和运行时实现、以及开箱即用的IDE工具链支持,为开发者打造友好开发体验和卓越程序性能。”据介绍,仓颉编程语言是一款面向全场景智

本站6月21日消息,华为自研仓颉编程语言今日正式亮相,官方宣布开启HarmonyOSNEXT仓颉语言开发者预览版Beta招募。本次升级为开发者预览版尝鲜升级,提供仓颉语言SDK、开发者指南以及相关的DevEcoStudio插件,供开发者使用仓颉语言开发、调试及运行HarmonyOSNext应用。报名周期:2024年6月21日-2024年10月21日申请要求:本次HarmonyOSNEXT仓颉语言开发者预览版Beta招募活动,仅面向以下开发者开放报名:1)已在华为开发者联盟完成实名认证;2)完成H

本站6月22日消息,华为昨日面向全球开发者介绍华为自研编程语言——仓颉(Cangjie)。这是仓颉编程语言的首次公开亮相。本站查询获悉,天津大学、北京航空航天大学深度参与了华为“仓颉”的研发。天津大学:仓颉编程语言编译器天津大学智能与计算学部软件工程团队携手华为仓颉团队,深度参与仓颉编程语言编译器的质量保障研究。据介绍,仓颉编译器是与仓颉编程语言共生的基础软件。在仓颉编程语言的筹备阶段,与之相配的高质量编译器成为核心目标之一。随着仓颉编程语言的演化,仓颉编译器也在不断地升级、改进。五年来,天津大

近期有很多小伙伴咨询小编MicrosoftEdge浏览器不显示图片怎么办,接下来就让我们一起学习一下MicrosoftEdge浏览器不显示图片的解决方法吧,希望可以帮助到大家。1、首先点击左下角开始,右击“Microsoftedge浏览器”,如下图所示。2、然后选择“更多”,点击“应用设置”,如下图所示。3、接着下滑找到“图片”,如下图所示。4、最后将图片下方的开关打开即可,如下图所示。上面就是小编为大家带来的MicrosoftEdge浏览器不显示图片怎么办的全部内容,希望对大家能够有所帮助哦。

本站6月21日消息,在HDC2024华为开发者大会前,华为自研仓颉编程语言正式亮相,仓颉官网现已上线。官网介绍显示,仓颉编程语言是一款面向全场景智能的新一代编程语言,主打“原生智能化、天生全场景、高性能,强安全”。融入鸿蒙生态,为开发者提供良好的编程体验。本站附官网介绍如下:原生智能化内嵌AgentDSL的编程框架,自然语言&编程语言有机融合;多Agent协同,简化符号表达,模式自由组合,支持各类智能应用开发。天生全场景轻量化可缩放运行时,模块化分层设计,内存再小也能装得下;全场景领域扩

C++与其他现代编程语言的优缺点对比为:C++优势:高性能、低级控制、丰富的库生态系统。C++劣势:学习曲线陡峭、手动内存管理、可移植性受限。Python优势:学习曲线平滑、广泛的库支持、解释型语言。Java优势:平台无关、自动内存管理、广泛应用。JavaScript优势:前端开发必备、轻量级、动态类型。

6月21日消息,今天下午,华为开发者大会2024将正式揭幕。“纯血鸿蒙”HarmonyOSNEXT自然是重中之重,按照余承东之前透露的规划,今天下午就可能正式宣布公测,普通消费者也能尝鲜“纯血鸿蒙”了。据爆料,首批支持的手机为Mate60系列和Pura70系列。值得注意的是,作为“纯血鸿蒙”,HarmonyOSNEXT去掉了传统的Linux内核和AOSP安卓开源代码,全栈自研。据新浪科技最新报道称,华为还将补齐鸿蒙生态的最后一环,在大
