MySql创建一个存储过程

MySQL 存储过程是从 MySQL 5.0 新功能。存储过程的长处有一箩筐。只是最基本的还是运行效率和SQL 代码封装。

特别是 SQL 代码封装功能,假设没有存储过程,在外部程序訪问数据库时(比如 PHP),要组织非常多 SQL 语句。特别是业务逻辑复杂的时候,一大堆的 SQL 和条件夹杂在 PHP 代码中,让人不寒而栗。如今有了 MySQL 存储过程,业务逻辑能够封装存储过程中,这样不仅easy维护,并且运行效率也高。

一、MySQL 创建存储过程 
“pr_add” 是个简单的 MySQL 存储过程。这个存储过程有两个 int 类型的输入參数 “a”、“b”,返回这两个參数的和。

drop procedure if exists pr_add;

-- 计算两个数之和

create procedure pr_add
(
   a int,
   b int
)
begin
   declare c int;

   if a is null then
      set a = 0;
   end if;

   if b is null then
      set b = 0;
   end if;

   set c = a + b;

   select c as sum;

   /*
   return c;- 不能在 MySQL 存储过程中使用。return 仅仅能出如今函数中。
  /
end;
二、调用 MySQL 存储过程 
call pr_add(10, 20);
运行 MySQL 存储过程,存储过程參数为 MySQL 用户变量。

set @a = 10;
set @b = 20;

call pr_add(@a, @b);
三、MySQL 存储过程特点 
创建 MySQL 存储过程的简单语法为:

create procedure 存储过程名字()
(
   [in|out|inout] 參数 datatype
)
begin
   MySQL 语句;
end;
MySQL 存储过程參数假设不显式指定“in”、“out”、“inout”。则默觉得“in”。习惯上。对于是“in” 的參数,我们都不会显式指定。

1. MySQL 存储过程名字后面的“()”是必须的,即使没有一个參数。也须要“()”

2. MySQL 存储过程參数,不能在參数名称前加“@”。如:mailto:%E2%80%9C@a int”。以下的创建存储过程语法在 MySQL 中是错误的(在 SQL Server 中是正确的)。 MySQL 存储过程中的变量,不须要在变量名字前加“@”,尽管 MySQL client用户变量要加个“@”。

create procedure pr_add
(
   @a int,- 错误
   b int   - 正确
)
3. MySQL 存储过程的參数不能指定默认值。

4. MySQL 存储过程不须要在 procedure body 前面加 “as”。而 SQL Server 存储过程必须加 “as” keyword。

create procedure pr_add
(
   a int,
   b int
)
as             - 错误,MySQL 不须要 “as”
begin
   mysql statement ...;
end;
5. 假设 MySQL 存储过程中包括多条 MySQL 语句,则须要 begin end keyword。

create procedure pr_add
(
   a int,
   b int
)
begin
   mysql statement 1 ...;
   mysql statement 2 ...;
end;
6. MySQL 存储过程中的每条语句的末尾。都要加上分号 “;”

   ...

   declare c int;

   if a is null then
      set a = 0;
   end if;

   ...
end;
7. MySQL 存储过程中的凝视。

   /*
     这是个
     多行 MySQL 凝视。
  /

   declare c int;    - 这是单行 MySQL 凝视 (注意- 后至少要有一个空格)

   if a is null then 这也是个单行 MySQL 凝视
      set a = 0;
   end if;

   ...
end;
8. 不能在 MySQL 存储过程中使用 “return” keyword。

   set c = a + b;

   select c as sum;

   /*
   return c;- 不能在 MySQL 存储过程中使用。return 仅仅能出如今函数中。


  /
end;
9. 调用 MySQL 存储过程时候,须要在过程名字后面加“()”,即使没有一个參数,也须要“()”

call pr_no_param();
10. 由于 MySQL 存储过程參数没有默认值。所以在调用 MySQL 存储过程时候,不能省略參数。能够用 null 来替代。

call pr_add(10, null);

版权声明:本文博客原创文章,博客,未经同意,不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

attr与prop的区别

我们在获取checked属性值的时候,如果被选中则值为"checked"没选中获取值就是undefined. (引述他人)因为在有些浏览器中比如说只要写disabled,checked就可以了,而有的要写成disabled "disabled"&a…

定制化WordPress后台的6个技巧

WordPress后台并非千篇一律,你可以通过一些代码定制化一个你喜欢的后台,本文所述代码都应写在主题的functions.PHP中。 移除后台某些菜单 如果你不想客户因为点了错误的菜单选项而删除付费主题,或者搞乱后台的设置,那么把你不希望…

SNF快速开发平台MVC-自由排序组件

1. 自由排序功能使用 在一些需要排序优先级的数据进行调整处理,如民族数据,在北方实施的时候汉族比较多,希望把汉族放在第一位。在蒙古实施项目时,蒙古族人最多把蒙古族放在第一选择位。 1.1. 效果展示 图 1.1 1.2. …

Tip:强制执行exchange DAG节点之间的数据库副本移动

当exchange后端服务器MBX的小版本号不一致,比如都是exchange 2010 SP3 RU8的版本,但是小版本号不一致,这个时候我们去运行平衡exchange DAG分布的脚本的时候,低版本服务器上面的DAG数据库可能无法正常转移到优选节点,这…

系统边界确定

先说说系统边界的确定。这是在工程开发中紧接着需求分析的第二步。顾名思意,这个过程就是要确定我们要开发的系统和外部环境之间的界限,也就是要区分系统本身和它的外部环境。其中的外部环境可能包括用户,其它系统,软硬件条件等。 举个例子,一…

【联盛德W806上手笔记】十、ADC

目录ADCADC 电路设计库函数函数参数宏Demo中的例程main.cwm_hal_msp.cwm_it.cWindows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 摘自《W806 芯片设计指导书 V1.0》、《W806 MCU 芯片规格书 V2.0》 ADC 基于 Sigma-Delta ADC 的采集模块,集成 4 路 16 比特 AD…

php导入excel到mysql的方法

PhpSpreadsheet 实测 1. https://phpspreadsheet.readthedocs.io/en/latest/ 2 . 查看 phpinfo() 时,发现 php_zip 没有启动 , PHP如何开启自带的ZipArchive类,实现压缩解压功能 [转载]phpspreadsheet开发手记 使用PhpSpreadsheet导入&导出Excel&…

delphi中TStringGrid数据的导出

没什么好说的,就是一个导出Excel的功能,代码如下: function TExportToExcel.Export(SGrid_List: TStringGrid;filename:string;out Errstr:string): Boolean; varexcelapp:Variant;page:Variant;i,j:Integer;savedialog:TSaveDialog;strsavef…

常用插件整理

easydialog,简单易用的模态对话框弹窗 http://www.h-ui.net/easydialog-v2.0/index.html superslide,非常好用的电脑端滚动切换等特效插件 http://www.superslide2.com/ swiper,非常好用且完善的手机端滚动触摸滑动特效插件 http://www.swipe…

【电路补习笔记】8、稳压电路 —— 线性电源及LDO

目录有名的电源芯片品牌DCDC电源分类开关电源vs线性稳压器线性电源参数线性电源工作原理集成稳压器78/79系列(固定输出电压)正、负对称输出两组电源的稳压电路扩展输出电压扩大输出电流LM317/LM337(可调输出电压)正、负对称输出两…

ajax代码整理

$.ajax({ type: "post", 【以POST或GET的方式请求。默认GET。PUT和DELETE也可以用,有的浏览器不支持】 url: url, 【请求的目的地址,须是一个字符串。】 contentType: "application/json", 【以哪种数据类型发送请求】 data: data, …

创建一个简单的WCF程序

为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用。本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本结构。对那些对WCF不是很了解的读者来说,这个例子将带领你正式进入WCF的世界。 在这个例…

交换机应用之端口模式(access、trunk和hybird)、是否标记(tag、untag)、端口缺省vlan(pvid、native id)...

一、概述打不打标记Tag,untag以及交换机的各种端口模式是网络工程技术人员调试交换机时接触最多的概念了。标记tag就是指VLAN的标签,数据包属于哪个VLAN的。交换机三种端口模式Access vlan、Trunk vlan和Hybrid vlan三种,即以太网端口有三种链…

深圳IO —— 一个汇编编程小游戏

目录简介数据手册接口简单 I/OXBus简单 I/O 对比 XBus语言参考程序结构注释标签寄存器accdatp0、p1、x0、x1、x2、x3null 伪寄存器指令操作数确保进行足够的睡眠 (slp)!基本指令算法指令条件指令隐藏指令游戏界面DIY版本: 简介 以下介绍摘自未来软件园 …

ubuntu所有php扩展php-7.0扩展列表

ubuntu所有php扩展php-7.0扩展列表 sudo apt-get install php7.0-bcmath sudo apt-get install php7.0-bz2 sudo apt-get install php7.0-calendar sudo apt-get install php7.0-ctype sudo apt-get install php7.0-curl sudo apt-get install php7.0-dom sudo ap…

unity shader 编辑器扩展类 ShaderGUI

这应该unity5才出的新功能了,今天看文档时刚巧看到了,就来尝试了一下。 效果如图: shader 的编辑器扩展分为2种方法: 是通过UnityEditor下的ShaderGUI类来实现的,形式比较近似于我们一般对unity编辑器的扩展方式。是通…

英语语法学习2--句子的成分

句子成份 词语和句子,就象是个人与家庭之间的关系一样,家庭是有个人组成的,家庭带来的幸福和责任都随着成员的增加而几何倍数的递增。 但是个人绝对不能脱离家庭。一个没有家庭概念的人注定活着没有什么意义。 现在我们聊一下,词语…

DataTables获取指定元素的行数据

https://www.cnblogs.com/hdwang/p/7126796.html 看上帖,没有看懂 看官网 https://datatables.net/examples/ajax/null_data_source.html 好像看懂,待测试。 响应式处理: https://datatables.net/extensions/responsive/ 实测代码 &l…

[LeetCode] Power of Two 判断2的次方数

Given an integer, write a function to determine if it is a power of two. Example 1: Input: 1 Output: true Example 2: Input: 16 Output: true Example 3: Input: 218 Output: false 这道题让我们判断一个数是否为2的次方数,而且要求时间和空间复杂度都为常数…

【电路补习笔记】9、电容式开关电源(电荷泵)

目录分类原理电荷泵基础开关电容稳压器的细调功能电荷泵的电压增益调节输出电容(Co)优点电容式开关稳压器减小纹波相关应用老师的主页:唐老师讲电赛 视频地址: 电源大师3——电容式开关电源(电荷泵)工作原理…