数据库原理与应用 第 15 章 · 第七节
课程第 15 章第七节 第七节两条路语法格式特征上特征下例15-10例15-11CALL图形界面 版式
第 15 章 存储过程与函数 · 第七节

创建与调用存储过程

本 节 知 识 点
  1. 52现在开始建真的存储过程
  2. 53代码窗口敲,或者用菜单点
  3. 54CREATE PROCEDURE 名(参数)
  4. 55characteristic 是给谁看的
  5. 56SQL SECURITY 与 COMMENT
  6. 57不带参数,数一数学生人数
  7. 58列出每人的选课门数
  8. 59存好之后,用 CALL 让它跑
  9. 60Workbench 里点着调
52
第 15 章 · 第七节

现在开始建真的存储过程

前面几节的零件,这一节全用上。

第 52 页课件

重 点

六件事:创建、调用、查看、修改、删除、参数。这一节先讲前两件。

知道更多

从这一节起,每一条语句都能在上机页里敲一遍,敲完就记住了。

想一想

回想一下,写存储过程的标准模板是什么?

53
第 15 章 · 第七节

代码窗口敲,或者用菜单点

菜单点出来的还是同一段代码,学会敲的那一种就够。

第 53 页课件

试一试从改定界符到调用,六步走

  1. DELIMITER $$ 把结束符改掉
  2. CREATE PROCEDURE 名(参数) 起名字、定参数
  3. BEGIN … END 把要干的事装进去
  4. $$ 到这里整段才提交给服务器
  5. DELIMITER ; 改回来,不然后面每句都要敲 $$
  6. CALL 名(实参) 这才真的跑起来

重 点

用哪种工具不重要,重要的是那六步一步都不能少。

知道更多

当前用户得有 CREATE ROUTINE 权限才建得了,这是第 8 章那套权限。

54
第 15 章 · 第七节

CREATE PROCEDURE 名(参数)

括号里是参数,BEGIN…END 里是过程体。

第 54 页课件

重 点

没有参数也要写一对空括号,一个都不能省。

知道更多

课件这一页把 CREATE 拼成了 CREAE,下面那段语法格式里是对的。

上机做

上机一第 2 题 建第一个存储过程

想一想

过程名能不能跟表名重复?

55
第 15 章 · 第七节

characteristic 是给谁看的

告诉服务器这个过程算不算得准、要不要读表。

第 55 页课件

记牢它三类特征

  1. 确定不确定
  2. 读不读数据
  3. 按谁的权限跑

重 点

过程可以不写,函数不写就建不起来。这一条课件没提,下一节要撞一次。

知道更多

DETERMINISTIC 的意思是:同样的输入一定给同样的输出。

56
第 15 章 · 第七节

SQL SECURITY 与 COMMENT

按定义者的权限跑,还是按调用者的权限跑。

第 56 页课件

分清楚两种安全类型

写法按谁的权限
DEFINER建它的人
INVOKER调它的人

重 点

默认是 DEFINER,所以普通用户调一个 root 建的过程,也能碰到 root 才碰得到的表。

想一想

这两种设置各适合什么场合?

57
第 15 章 · 第七节

不带参数,数一数学生人数

最简单的一个,正好把模板走一遍。

第 57 页课件

重 点

过程体里就一句 SELECT,调用时它把结果集直接送回客户端。

上机做

上机四第 1 题 建一个无参过程

想一想

如果过程体里有三句 SELECT,会回来几张表?

58
第 15 章 · 第七节

列出每人的选课门数

课件这一题的要求,其实做不到。

第 58 页课件

重 点

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

知道更多

真要 NULL,得在外面再套一层 NULLIF(COUNT(sc.cno),0)。

上机做

上机四第 3 题 0 和 NULL 差在哪

想一想

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

59
第 15 章 · 第七节

存好之后,用 CALL 让它跑

有参数就在括号里给,没参数括号可以省。

第 59 页课件

重 点

创建只是把它存进库里,CALL 才是真的执行。这两件事要分清。

记牢它两个动词

  1. CREATE 建
  2. CALL 调

想一想

建好之后关掉客户端再连进来,它还在吗?

60
第 15 章 · 第七节

Workbench 里点着调

本质上还是发一句 CALL 过去。

第 60 页课件

重 点

菜单上点出来的和手敲的是同一句话,工具只是替你把语句拼好。

知道更多

学会在代码窗口里敲,换成命令行、换成程序里调,都是一回事。

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