内容正文:
9.3 MySQL的数据库编程
----存储过程
数据库原理与应用技术--MySQL
同步精品课堂
河北科学技术出版社
教学目标
一
了解存储过程的概念
教学目标
掌握存储过程的调用、删除命令
掌握存储过程的创建与修改命令
了解存储过程的作用及特点
掌握国家标准《机械制图》中有关图幅、比例、字体图线等基本规定。
教学重难点
二
教学难点
1、存储过程的特点
2、存储过程相关命令
教学重点
存储过程的相关命令的应用
教学难点
导入新课
三
讨论:
存储过程是一组为了完成特定功能的SQL语句集合。存储过程将SQL语句存储起来,存储在服务器中等待调用,那么我们用怎么来调用存储过程执行相应的操作呢?
任务一
1
认识存储过程
新知讲授
四
⊙存储过程
存储过程是一组为了完成特定功能的SQL语句集合。使用存储过程的目的是将常用或复杂的工作预先用SQL语句写好并用一个指定名称存储起来,这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程。存储过程就像是程序中的子程序,存储在数据库中。
➽ 存储过程概述
1、封装性;
2、执行效率高;
3、可重用性;
4、功能强大;
➽ 存储过程的特点
新知讲授
四
⊙创建存储过程
➽ 创建存储过程
基本语法形式如下:
CREATE PROCEDURE <过程名> ([[IN | OUT | INOUT ] 参数名 数据类型[,[IN | OUT | INOUT ] 参数名 数据类型....]])[特性....]
BEGIN
<过程体>
END
新知讲授
四
⊙创建存储过程
➽ 创建存储过程
说明:
1、IN:表示调用者向过程传入值(传入值可以是字面量或变量);
2、OUT : 表示过程向调用者传出值(可以返回多个值)(传出值只能是变量);
3、INOUT:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量);
➽ 流程控制语句
MySQL中用来构造流程控制语句的有:IF语句、CASE语句、LOOP语句、LEAVE语句、ITEARTE语句、REPEAT语句和WHILE语句。
新知讲授
四
⊙创建存储过程
➽ IF语句
基本语法形式如下:
IF expr_condition THEN statement_list
[ELSEIF expr_condition THEN statement_list]
[ELSE statement_list]
END IF
说明:
1、expr_condition:条件判断表达式;
2、statement_list:表示满足判定式后的执行语句;
3、所有IF语句都需要用END IF来结束,在THEN中执行,ELSE IF和ELSE是可选的。
新知讲授
四
⊙创建存储过程
➽ 实例:有一个变量val,判断变量是否为空,若为空,输入“val is NULL”,否则输入“val is not NULL”
MySQL语句如下:
IF val IS NULL
THEN SELECT ’val is NULL’
ELSE SELECT ’val is not NULL’
END IF;
新知讲授
四
⊙创建存储过程
➽ CASE语句
基本语法形式如下:
CASE case_expr
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list].....
[ELSE statement_list ]
END CASE
说明:
1、case_expr:表示条件判断的表达式;
2、when_value:表示表达式可能的值;3、statement_list,表示不同when_value值的执行语句;
新知讲授
四
⊙创建存储过程
➽ 实例:使用CASE语句的第一种格式,判断val的值,若等于1则输出“val is 1”,若等于2则输出”val is 2”,或者两者都不等于则输出“val is not 1 or 2”
MySQL语句如下:
CASE val
WHEN 1 THEN SELECT ‘val is 1’;
WHEN 2 THEN SELECT ‘val is 2’;
ELSE SELECT ‘val is not 1 or 2’;
END CASE;
新知讲授
四
⊙创建存储过程
➽ LOOP语句与LEAVE语句
基本语法形式如下:
[loop_lable:] LOOP
statement_list
END LOOP [loop_lable]
说明:
1、loop_lable:表示LOOP语句的标注名称;
2、statement_list,表示循环执行的语句
新知讲授
四
⊙创建存储过程
➽ 实例:定义一个变量id,初始值为0,循环执行id加1的操作,当id值小于10时,循环重复执行,当id值大于或等于10时,使用LEAVE语句退出循环。
MySQL语句如下:
DECLARE id INT DEFAULT 0;
add_loop:LOOP
SET id=id+1;
IF id>=10 THEN LEAVE add_loop;
END IF;
END LOOP add_loop;
新知讲授
四
⊙创建存储过程
➽ ITERATE语句
基本语法形式如下:
ITEARTE lable
说明:
1、lable:表示循环的标志;
2、ITEARTE语句只可以出现在LOOP、REPEAT和WHILE语句中
新知讲授
四
⊙创建存储过程
➽ REPEAT语句
说明:
1、repeat_lable为REPEAT语句的标注名称,该参数是可选的;
2、REPEAT语句内的语句或语句群被重复,直至expr_condition为真;
基本语法形式如下:
[repeat_lable:] REPEAT
statement_list
UNTIL expr_condition
END REPEAT [repeat_lable]
新知讲授
四
⊙创建存储过程
➽ 实例:当id值未达到10时,重复循环让id值加1。
MySQL语句如下:
DECLARE id INT DEFAULT 0;
REPEAT
SET id=id+1;
UNTIL id>=10;
END REPEAT;
新知讲授
四
⊙创建存储过程
➽ WHILE语句
说明:
1、while_lable为WHILE语句的标注名称,可省略;
2、expr_condition为进行判断的表达式,如果表达式为真,WHILE语句内的语句或语句群被执行,直至expr_condition为假,退出循环;
基本语法形式如下:
[while_lable:] WHILE expr_condition DO
Statement_list
END WHILE [while_lable]
新知讲授
四
⊙创建存储过程
➽ 实例:创建一个变量i,初始值为0,当i小于10时重复执行加1.
MySQL语句如下:
DECLARE i INT DEFAULT 0;
WHILE i <10 DO
SET i=i+1;
END WHILE;
新知讲授
四
⊙调用、修改存储过程
➽ 调用存储过程
基本语法形式如下:
CALL <存储过程名(实参列表)>
➽修改存储过程
基本语法形式如下:
ALTER PROCEDURE <过程名> [characteristic .....]
新知讲授
四
⊙调用、修改存储过程
➽ 实例:将存储过程param_pro的读写权限改为MODIFIES SQL DATA,并指定调用者可以执行。
MySQL语句如下:
ALTER PROCEDURE param_pro
MODIFIES SQL DATA
SQL SECURITY INVOKER;
新知讲授
四
⊙查看存储过程
➽ 显示存储过程
基本语法形式如下:
SHOW PROCEDURE STATUS
➽显示特定数据库的存储过程
基本语法形式如下:
SHOW PROCEDURE STATUS WHERE DB=‘数据库名’
新知讲授
四
⊙查看存储过程
➽ 显示特定模式的存储过程,要求显示名称中包含某字符的存储过程
基本语法形式如下:
SHOW PROCEDURE STATUS WHERE NAME LIKE 通配符表达式
➽显示存储过程的源码
基本语法形式如下:
SHOW CREATE PROCEDURE <存储过程名>
新知讲授
四
⊙删除存储过程
➽删除存储过程
基本语法形式如下:
DROP PROCEDURE [IF EXISTS] <存储过程名>
师生互动
五
1、总结存储过程的概念、特点和作用。
2、总结存储过程的创建、调用、查看等命令。
讨论
随堂练习
六
1、 关于存储过程的说法,下列说法错误的是( )
A.存储过程是一组为了完成特定功能的SQL语句集合
B.存储过程像是程序中的子程序,存储在数据库中
C.存储过程不能被调用
D.存储过程的功能强大,可以实现数据库的复杂操作
【答案】C
【解析】存储过程可以被多次调用,增加了可重用性。
随堂练习
六
2、下列选项中,创建存储过程的命令是( )
A.CREATE PROCEDURE
B.CREATE FUNCTION
C.CREATE TRIGGER
D.REMOVE PROCEDURE
【答案】A
【解析】CREATE PROCEDURE命令用于创建存储过程。
随堂练习
六
3、 在MySQL存储过程中,ITERATE语句不能出现在以下哪个语句中( )。
A. LOOP
B. REPEAT
C.WHILE
D. IF
【答案】D
【解析】ITERATE语句只能出现在LOOP,REPEAT,WHILE语句中。
随堂练习
六
4、 存储过程的CASE语句,与控制流程函数中的SQL CASE表达式中的CASE语句相同。( )
【答案】错。存储过程的CASE语句,与控制流程函数中的SQL CASE表达式中的CASE语句不同,存储过程中,CASE语句不能有ELSE NULL子句,并且用END CASE代替END来终止。
5、 存储过程的使用降低了SQL语句功能的灵活性。( )
【答案】错。存储过程的使用增强了SQL语句功能的灵活性。
课堂小结
七
谢谢
$$