数据库之存储过程和存储函数(六)

数据库之存储过程和存储函数(六)


什么是存储过程

​ 存储过程是一组为了完成某项特定功能的SQL语句集,其实质就是一段存储在数据库中的代码。它可以由声明式的sql语句和过程式sql语句组成。

优点

 		1. 可以增强sql语言的功能和灵活性 
 		2. 良好的封装性
 		3. 高性能
 		4. 减少网络流量
 		5. 可作为一种安全机制来确保数据库的安全性和数据的完整性

创建存储过程

-- 自定义结束符$$
DELIMITER $$

-- 创建存储过程
CREATE PROCEDURE sp_name([proc_parameter[,…]]) -- sp_name存储过程的名称
routine_body	-- 存储过程的主体部分,也称为存储过程体
-- 例:
CREATE PROCEDURE sp_update_sex(IN cid INT,IN csex CHAR(1))
    BEGIN
       UPDATE customers SET cust_sex=csex WHERE cust_id=cid;
    END $$
-- 使用DECLARE语句声明局部变量
DECLARE var_name[,…] type [DEFAULT value]
例:DECLARE var_name[,…] type [DEFAULT value]
-- 使用DECLARE语句声明局部变量
1)只能在存储过程体的BEGIN…END语句块中声明;
2)必须在存储过程的开头处声明;
3)作用范围仅限于声明它的BEGIN…END语句块;
4)不同于用户变量

局部变量与用户变量的区别:

1)局部变量声明时,在其前面没有@符号,并且它只能

​ 被声明它的BEGIN…END语句块中的语句所使用;

2)用户变量在声明时,会在其名称前面使用@符号,同

​ 时已声明的用户变量存在于整个会话之中。

-- 使用SET语句为局部变量赋值
SET var_name=expr[,var_name=expr]…
例:SET cid=910;
-- 使用SELECT…INTO语句把选定列的值直接存储到局部变量中
SELECT col_name[,…] INTO var_name[,…] table_expr

流程控制语句

1、条件判断语句
	IF 条件 THEN 表达式1 ELSE 表达式2 end if
	CASE语句
2、循环语句
	WHILE语句
例: WHILE 条件 表达式 END WHILE
	REPEAT语句
例:repeat 表达式 END repeat
	LOOP语句
例:loop 表达式 END loop
3、结束语句
	ITERATE语句  -- 用于表示退出当前循环
4、使用DECLARE CURSOR语句创建游标
    DECLARE cursor_name CURSOR FOR select_statement
5、使用OPEN语句打开游标
    OPEN cursor_name
6、使用FETCH…INTO语句读取数据
    FETCH cursor_name INTO var_name[,var_name] …
7、使用CLOSE语句关闭游标
    CLOSE cursor_name 
8、使用CALL语句调用存储过程
    CALL sp_name([parameter[,…]])
    CALL sp_name[()]
例:> CALL sp_update_sex(909,’M’);
9、使用DROP PROCEDURE语句删除存储过程
    DROP PROCEDURE[IF EXISTS] sp_name

什么是存储函数

存储函数与存储过程一样,是由SQL语句和过程式语句组成的代码片段。

使用CREATE FUNCTION语句创建存储函数

 CREATE FUNCTION sp_name([func_parameter[,…]]) 
 RETURNS type -- 声明存储函数返回值的数据类型; type指定返回值的数据类型 
 routine_body -- 指定存储函数的主体部分,也称为存储函数体 
 例:
 Use mysql_test; 
 DELIMITER $$ 
 CREATE FUNCTION fn_search(cid INT)  RETURNS CHAR(20)  
 DETERMINISTIC 
 BEGIN  
 DECLARE SEX CHAR(20);  
 SELECT cust_sex  INTO SEX FROM  customers WHERE  cust_id=cid;  
 IF SEX IS NULL  THEN   RETURN(SELECT’没有该客户’);  
 ELSE IF SEX=‘F’ THEN   RETURN(SELECT’女’);            
 ELSE   RETURN(SELECT  ‘男’);
 END IF;                    
 END IF; END $$ 

使用关键字SELECT调用存储函数

 SELECT sp_name([func_parameter[,…]]) 

使用DROP FUNCTION语句删除存储函数

DROP FUNCTION [IF EXISTS] sp_name 

存储过程和存储函数的区别

存储函数 存储过程
不能拥有输出参数 可以拥有输出参数
必须包含一条RETURN语句 不允许包含RETURN语句
可以直接调用存储函数,不需要CALL语句 需要CALL语句调用存储过程
posted @ 2019-08-27 11:33  SunArmy  阅读(1482)  评论(0编辑  收藏  举报