数据库原理与应用 第 15 章 · 上机四
课程第 15 章上机四 无参过程重名与不存在IN 参数OUT 参数INOUT课件那一题看和改连续练习 版式
第 15 章 存储过程与函数 · 上机四

建、调、看、改、删与三种参数

课件第 52 到 71 页那一整套,加上课件自己犯的那个 NULL 的错。
已完成 0 / 7
本 次 上 机 题 目
  1. 01例 15-10:数一数一共多少学生
  2. 02同一个名字建两次,删一个不存在的
  3. 03例 15-11 那个要求,其实做不到
  4. 04把结果装在变量里带出来
  5. 05带一个值进去,带一个新值出来
  6. 06cal_students:两个 IN 加一个 OUT
  7. 07SHOW、ALTER、DROP 各来一遍
  8. 从建到删,一个过程的一生
01
第 15 章 · 上机四

例 15-10:数一数一共多少学生

不带参数,也要写一对空括号。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

没有参数时,CALL 后面的括号可写可不写,两句都跑得通。

想一想

过程名能不能跟表名一样?

02
第 15 章 · 上机四

同一个名字建两次,删一个不存在的

1304 和 1305,两个最常见的报错。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

重名报 1304,删不存在的报 1305,加上 IF EXISTS 就只剩一条警告。

记牢它写脚本的习惯

  1. 先 DROP IF EXISTS
  2. 再 CREATE
  3. 脚本才能重复跑

想一想

为什么不做成「重名就自动覆盖」?

03
第 15 章 · 上机四

例 15-11 那个要求,其实做不到

课件说没选课的显示 NULL,可 COUNT 数出来是 0。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

何欣荣那一行是 0 不是 NULL。要 NULL 得再套一层 NULLIF。

知道更多

COUNT 永远返回一个数,一行没有就是零,它不会返回 NULL。

想一想

这里显示 0 和显示 NULL,哪个更合业务?

04
第 15 章 · 上机四

把结果装在变量里带出来

实参必须是 @ 变量,传常量当场报 1414。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

常量装不住带回来的值,所以必须给一个变量的地方。

知道更多

少传一个参数报 1318,它把该有几个、实际几个都写在报错里。

想一想

OUT 参数进去的时候是什么值?

05
第 15 章 · 上机四

带一个值进去,带一个新值出来

既当输入又当输出,实参得是有值的 @ 变量。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

调两次就加了两次,@m 从 100 变 105 再变 110。

知道更多

课件把 @ 变量叫成「全局变量」,其实它是会话变量,换个连接就没了。

想一想

IN 参数在过程里被改了,外面的实参会跟着变吗?

06
第 15 章 · 上机四

cal_students:两个 IN 加一个 OUT

课件第 69 页那段代码,原样敲一遍。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

三个实参对三个形参,最后一个必须是 @ 变量,前两个是常量。

知道更多

中间那个 people 其实可以省掉,直接 SELECT COUNT(*) INTO num 就行。

想一想

把参数顺序写反了会怎么样?

07
第 15 章 · 上机四

SHOW、ALTER、DROP 各来一遍

过程存进库里之后,代码随时看得到。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

ALTER 只改得动特征信息,过程体要换代码只能先 DROP 再 CREATE。

知道更多

这两条回显都很宽,按右上角的「上下」切一下版式就整屏放得下。

想一想

改一行代码就得删了重建,实际工作里怎么管版本?

第 15 章 · 上机四

从建到删,一个过程的一生

自己写一个:给系别和分数线,数出这个系有几人上线。

Welcome to the MySQL monitor. Commands end with ;
Server version: 8.0.36 MySQL Community Server - GPL
终端一打开就在 teaching 库里,五张表已经装好。这一章要往里面存过程和函数。
mysql>

重 点

两个 IN 一个 OUT,加一次连接查询,这就是考试大题的样子。

记牢它写过程四步

  1. 定参数
  2. 写过程体
  3. INTO 接结果
  4. CALL 验一遍

想一想

DISTINCT 去掉,数出来的还是人数吗?

保山学院·人工智能教研室·曹鼎鼎