文章目录

  • stored procedures
    • 创建stored procedures
    • 使用MySqlWorkbeach创建stored procedures
    • Parameters
    • Default Parameters
    • Parameters Validation
    • Out Parameters
    • variables
  • function
    • 使用函数

stored procedures

创建stored procedures

存储过程(Stored Procedure)是:大型数据库系统中,一组为了完成特定功能的 SQL 语句集,这些SQL语句集存储在数据库中,经过第一次编译后,后续调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是数据库的一个重要对象。

  • 创建一个存储过程
use sql_invoicing;
//DELIMITER将标准分隔符分号";"更改为$$,保证存储过程内容的整体性
DELIMITER $$
//创建一个新的存储过程,存储过程的名字为get_clients()
CREATE PROCEDURE get_clients()
//BEGIN和END之间的部分称为存储过程的主体
BEGINSELECT * FROM clients;
END$$
DELIMITER ;
  • 调用一个存储过程
call sql_invoicing.get_clients();

使用MySqlWorkbeach创建stored procedures

自己写时,每次都要修改限定符有点麻烦,可以按照如下步骤

  1. 每个database中有 Stored Procedures,右击选择CREATE Stored Procedures
  2. 只需要关注自己需要填写的内容
  3. 点击Apply按钮

    顺便说下删除stored procedures
DROP PROCEDURE IF EXISTS get_invoices;
  1. 在点击右下角Apply

Parameters

对于stored procedures构成的参数可以进行传参


USE `sql_invoicing`;
DROP procedure IF EXISTS `git_clients`;DELIMITER $$
USE `sql_invoicing`$$
//state 参数名;char(2)参数类型
CREATE PROCEDURE `git_clients` (state char(2))
BEGIN
select * from  client c
where c.state = state;
END$$DELIMITER ;
  • 调用

Default Parameters

  • 可以指定参数的默认值来执行语句,假如state为NULL,返回全部,否则返回条件满足的数据
USE `sql_invoicing`;
DROP procedure IF EXISTS `git_clients`;DELIMITER $$
USE `sql_invoicing`$$
CREATE PROCEDURE `git_clients` (state char(2))
BEGINIF state IS NULL THENselect * FROM clients;ELSEselect * from  client cwhere c.state = state;END IF;
END$$DELIMITER ;//第二种写法
BEGINselect * from  client cwhere c.state = IFNULL(state,c.state);
END$$

Parameters Validation

对于参数有时候回去限制其的范围

  • 能够对invoices表中的payment_amount 与payment_date进行修改且payment_amount 不为负数
USE `sql_invoicing`;
DROP procedure IF EXISTS `make_payment`;DELIMITER $$
USE `sql_invoicing`$$
CREATE PROCEDURE `make_payment` (invoice_id INT,
//DECIMAL(9,2)表示最大占9位的小数,2位小数点后面保留2位
payment_amount DECIMAL(9,2),payment_date DATE)
BEGINif payment_amount <= 0 THEN//22003错误码表示超过参数范围signal sqlstate '22003' //输出错误的打印信息set message_text = 'Invalid payment amount';end if;update invoices iset i.payment_total = payment_amount,i.payment_date = payment_datewhere i.invoice_id = invoice_id;
END$$DELIMITER ;

Out Parameters

对于传入参数,可以使用传出参数来获取结果需要关键词OUT

  • 没有付的订单的客户
USE `sql_invoicing`;
DROP procedure IF EXISTS `get_unpaid_invoices_for_client`;DELIMITER $$
USE `sql_invoicing`$$
CREATE PROCEDURE `get_unpaid_invoices_for_client` (client_id INT,OUT invoices_count int,  //输出关键词outOUT invoices_total DECIMAL(9,2)
)
BEGINselect count(*), sum(invoice_total)into invoices_count,invoices_total  //将上面两个值传入输出值from invoices iwhere i.client_id = client_idand payment_total = 0;
END$$DELIMITER ;

执行结果

variables

  • 全局变量,声明周期在整个连接的过程
set @invoices_count = 0;
  • 局部变量,生命周期只在于函数周期内
USE `sql_invoicing`;
DROP procedure IF EXISTS `get_rist_factor`;DELIMITER $$
USE `sql_invoicing`$$
CREATE PROCEDURE `get_rist_factor` ()
BEGIN//声明local变量declare risk_factor decimal(9,2) default 0;declare invoices_total decimal(9,2);declare invoices_cout int;select count(*),sum(invoice_total)into invoices_cout,invoices_totalfrom invoices;set risk_factor = invoices_total / invoices_cout * 5;select risk_factor;
END$$DELIMITER ;

执行

function

function与stored procedures类似,最大的不同是function只能返回单个值,不像stored procedures返回复数值或者行,列。

USE `sql_invoicing`;
DROP function IF EXISTS `get_risk_factor_for_client`;DELIMITER $$
USE `sql_invoicing`$$
CREATE DEFINER=`root`@`localhost` FUNCTION `get_risk_factor_for_client`(client_id int) RETURNS int
-- 每个函数至少有一个attribute-- deterministic 对于每次的输入值都有固定的值相对应,READS SQL DATA -- 表示是一个select语句用于查询-- modifies sql data 表示是一个修改函数例如inert into,update等
BEGINdeclare risk_factor decimal(9,2) default 0;declare invoices_total decimal(9,2);declare invoices_cout int;select count(*),sum(invoice_total)into invoices_cout,invoices_totalfrom invoices iwhere i.client_id = client_id;set risk_factor = invoices_total / invoices_cout * 5;RETURN IFNULL(risk_factor,0);
END$$DELIMITER ;

使用函数

select client_id,name,get_risk_factor_for_client(client_id) as risk_factor
from clients

MySQL8.0学习笔记(8)—— stored procedures,function相关推荐

  1. 【MySQL8.0学习笔记】约束:主键约束、自增长约束、非空约束、唯一性约束、默认约束与零填充约束

    本文对MySQL数据库的约束相关知识进行了归纳总结,包括主键约束.自增长约束.非空约束.唯一性约束.默认约束与零填充约束. 本专栏长期更新,敬请关注. 文章目录 1 MySQL约束简介 2 主键约束 ...

  2. Mysql8.0学习笔记

    一.数据库的常用概念 1.1为什么使用数据库? 1.实现数据的持久化,将数据保存到可掉电式的设备中使用. 即将数据存在硬盘等硬件中,但存储到硬件资源中,数据需要介质,如xsl,doc,jpg等格式,像 ...

  3. Zabbx6.0(学习笔记)

    Zabbx6.0(学习笔记) 目录导航 Zabbx6.0(学习笔记) 一.为什么 需要监控系统 二.如何选择监控 三.Zabbix概述 四.Zabbix安装哪个版本? Zabbix安装要求 1.硬件 ...

  4. Tensorflow2.0学习笔记(一)北大曹健老师教学视频1-4讲

    Tensorflow2.0学习笔记(一)北大曹健老师教学视频1-4讲 返回目录 这个笔记现在是主要根据北京大学曹健老师的视频写的,这个视频超级棒,非常推荐. 第一讲 常用函数的使用(包含了很多琐碎的函 ...

  5. CCC3.0学习笔记_证书数据

    CCC3.0学习笔记_证书数据 系列文章目录 文章目录 系列文章目录 前言 1. [A] - SE Root CA Certificate 2. [B] - SE Root Certificate 3 ...

  6. flink1.12.0学习笔记第1篇-部署与入门

    flink1.12.0学习笔记第 1 篇-部署与入门 flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇-高级 ...

  7. mysql5.0镜像_Mysql5.0学习笔记(一)

    Mysql5.0学习笔记(一) -基本sql语句与支持字符集 1.登录 mysql -h localhost -u root 2.创建用户firstdb(密码firstdb)和数据库,并赋予权限于fi ...

  8. Python学习笔记:函数(Function)

    Python学习笔记:函数(Function) 一.函数基本概念 函数是Python里组织与重用代码最重要的方法.一般来说,如果你期望多次重复相同或相似的代码,写一个可重用的函数可能是值得的.函数通过 ...

  9. flink1.12.0学习笔记第2篇-流批一体API

    flink1.12.0学习笔记第 2 篇-流批一体API flink1.12.0学习笔记第1篇-部署与入门 flink1.12.0学习笔记第2篇-流批一体API flink1.12.0学习笔记第3篇- ...

  10. CCC3.0学习笔记_认证和隐私保护

    CCC3.0学习笔记_Authentication and Privacy Keys 系列文章目录 文章目录 系列文章目录 前言 1. 手机端和车厂服务器端的密钥存储 2. 密钥的产生和使用的说明 3 ...

最新文章

  1. python画横条形图-用matplotlib画条形图(bar)
  2. Lua直接调用动态链接库(DLL或so文件)
  3. 单片机检测stc没反应_stc单片机无法烧录,一直正在检测目标单片机怎么办?
  4. 客座招生 | 中科院深圳先进院招收智能机器人方向联培和客座学生
  5. 运行脚本时用SPOOL保存运行结果的问题
  6. Vue如何在data中正确引入图片路径
  7. [渝粤教育] 广东-国家-开放大学 10763k2_客户服务管理_21秋考试
  8. Anaconda简介:它是什么,以及如何安装
  9. 什么是阿姆达尔定律?
  10. C语言的变参函数设计
  11. 计算机文化书签,《计算机文化基础》EXCEL-机试[1]
  12. 英语演讲和英语课件ppt模板
  13. Vue 使用Excel表格导入导出
  14. 413 Arithmetic Slices
  15. Excel 下拉多选的设置
  16. 2016年第七届蓝桥杯决赛心得
  17. 支付宝花呗额度一直不涨?阿里老员工说出原因,亲测有效
  18. 1.Linux中超频及cpufreq相关汇总
  19. 鸿蒙系统安装第三方,网友表示:鸿蒙最新系统可以通过连接U盘安装第三方软件了...
  20. win10c语言弹出框,win10系统启动程序时弹出异常代码c0000005的解决技巧

热门文章

  1. JAVA程序设计:在圆内随机生成点(LeetCode:478)
  2. Linux c 地址空间 堆栈 数据段 代码段 变量存储位置
  3. windows底层编程基础
  4. idea无法下载源代码
  5. python教程cos_Python爬虫入门教程 12-100 半次元COS图爬取
  6. 基于OMNET++仿真平台的4维超立方体网络仿真
  7. 全国计算机等级考试c语言编程题,全国计算机等级考试C语言编程题(附答案)
  8. B+树数据库加锁历史
  9. linu重置root密码(CentOS7)
  10. 【转载】MAC OS X常用快捷键