数据库原理与应用 第 15 章 · 第七节
课程 › 第 15 章 › 第七节 查看修改与删除三种参数实参与调用 版式
第 15 章 存储过程与函数 · 第七节

管理存储过程与参数

查看、修改、删除存储过程,IN、OUT、INOUT 三种参数
本 节 知 识 点
  1. 26查看存储过程
  2. 27修改与删除
  3. 28三种参数
  4. 29实参与调用
26
第 15 章 · 第七节 · 课件第 61、62 页合并重做

查看存储过程

SHOW CREATE 看代码,SHOW STATUS 看状态。

15.4 存储过程课件第 61、62 页合并

查看存储过程

查看定义
SHOW CREATE PROCEDURE 过程名;
  • 显示过程的名称、代码、字符集等
  • Create Procedure 一列是完整的定义
查看状态
SHOW PROCEDURE STATUS LIKE '模式';
  • 模式中可以用 % 和 _ 通配符
  • 显示所属数据库、名称、类型、定义者、创建和修改时间、安全类型、注释、字符集等
SHOW CREATE PROCEDURE cal_courses;
SHOW PROCEDURE STATUS LIKE 'cal%';
27
第 15 章 · 第七节 · 课件第 63、64、65、66 页合并重做

修改与删除

ALTER 只改特征,改代码要删除后重建。

15.4 存储过程课件第 63、64、65、66 页合并

修改与删除存储过程

修改特征
ALTER PROCEDURE 过程名 [特征 …];
ALTER PROCEDURE cal_courses
  READS SQL DATA
  SQL SECURITY INVOKER
  COMMENT '显示学生选课门数';
  • ALTER PROCEDURE 只能改特征,不能改过程体
修改代码
  • 用语句:先 DROP PROCEDURE,再 CREATE PROCEDURE
  • 在 Workbench 中:右击过程,选 Alter Stored Procedure,改完单击 Apply
删除
DROP PROCEDURE [IF EXISTS] 过程名;
  • 加 IF EXISTS,过程不存在时不报错
  • 也可以右击过程,选 Drop Stored Procedure
28
第 15 章 · 第七节 · 课件第 67、68 页合并重做

三种参数

IN 传入,OUT 带出,INOUT 既传入又带出。

15.4 存储过程课件第 67、68 页合并

形式参数与三种参数类型

形式参数(形参):定义存储过程或函数时,写在名称后面括号中的变量。形参指明了参数的个数和类型,调用时才从实参得到值。
类型作用调用时的实参
IN输入,把值传入过程,过程中对它的修改不带回常量、表达式或变量
OUT输出,把过程中得到的结果带出必须是变量,一般用用户会话变量
INOUT既传入又带出必须是已经赋值的变量
  • 省略类型时为 IN
  • OUT 参数进入过程时值为 NULL,在过程中给它赋值
  • 用常量作 OUT 或 INOUT 参数的实参,报错 1414

试一试同一个过程体,三种参数

过程体都是 SET x = x * 2,调用前 SET @v = 5,再 CALL p(@v)
参数
进入过程时 x过程结束时 x调用后 @v

实 验

实验 4-3 IN 参数

实 验

实验 4-5 INOUT 参数

29
第 15 章 · 第七节 · 课件第 69、70、71 页合并重做

实参与调用

实参与形参一一对应,输出参数用变量接收。

15.4 存储过程课件第 69、70、71 页合并

实参与调用有参数的存储过程

实际参数(实参):调用存储过程时传给它的常量、变量或表达式。实参的个数、类型和传递方式要与形参一致。
例:按性别和院系统计人数
DELIMITER $$
CREATE PROCEDURE cal_students(
  IN sst ENUM('男', '女'),
  IN dp VARCHAR(45),
  OUT num INT)
BEGIN
  DECLARE people INT DEFAULT 0;
  SELECT COUNT(*) INTO people FROM s
  WHERE sex = sst AND dept = dp;
  SET num = people;
END $$
DELIMITER ;
调用
CALL cal_students('女', '信息学院', @n);
SELECT @n;   -- 3
  • 女、信息学院 分别传给 sst、dp
  • num 是输出参数,过程中 SET num = people,结束后值传给 @n
  • 在 Workbench 中单击执行图标,会弹出对话框,依次输入 女、信息学院、@n

练一练

执行 CALL cal_students('女', '信息学院', 5) 会怎样?
  1. A返回 5
  2. B报错,OUT 参数的实参必须是变量
  3. C把人数存入 5
答案 B

OUT 参数要把值带回调用处,只有变量才能接收,用常量报错 1414。

实 验

实验 4-4 OUT 参数

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