数据库系统原理(第5章:数据库编程)

一、存储过程

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

特点:

  • 可增强SQL语言的功能和灵活性
  • 良好的封装性
  • 高性能
  • 可减少网络流量
  • 可作为一种安全机制来确保数据库的安全性和数据的完整性

用户定义的结束符(ELIMITER

  • ELIMITER $$:
  • 例句:将MySQL结束符修改为两个感叹号“!!”  (DELIMITER !!)

使用CREATE PROCEDURE语句创建存储过程:CREATE PROCEDURE sp_name([proc_parameter[,…]]) routine_body ;

proc_paramete:指定存储过程的参数列表

routine_body:存储过程的主体部分,也称为存储过程体

[IN | OUT | INOUT] param_name type:参数 名,参数类型

例如:在mysql_test中创建一个存储过程,用于实现给定表customers中一个客户id号即可修改表customers中该客户的性别为一个指定的性别

数据库系统原理(第5章:数据库编程)_第1张图片

 

 

 

使用DECLARE语句声明局部变量:DECLARE var_name[,…] type [DEFAULT value]

例如:声明一个整型局部变量cid:   DECLARE cid INT(10);

使用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语句把选定列的值直接存储到局部变量中

数据库系统原理(第5章:数据库编程)_第2张图片

 

 

流程控制语句

  • 1、条件判断语句 IF…THEN …ELSE语句 CASE语句   (IF 条件 THEN 表达式1 ELSE 表达式2 END IF;)
  • 2、循环语句 WHILE语句 REPEAT语句 LOOP语句

WHILE 条件 表达式 END WHILE

repeat 表达式 END repeat

loop 表达式 END loop

ITERATE语句 用于表示退出当前循环

****************************游标CURSOR*****************************************

使用DECLARE CURSOR语句创建游标

数据库系统原理(第5章:数据库编程)_第3张图片

 

 

 

使用OPEN语句打开游标:OPEN cursor_name

使用FETCH…INTO语句读取数据:

数据库系统原理(第5章:数据库编程)_第4张图片

 

 

 

使用CLOSE语句关闭游标 :CLOSE cursor_name

**********************存储过程的使用************************

使用CALL语句调用存储过程

 

 

 调用数据库mysql_test中的存储过程sp_update_sex,将客户id号为909的客户性别修改为男性“M”

CALL sp_update_sex(909,’M’);

使用DROP PROCEDURE语句删除存储过程

DROP PROCEDURE[IF EXISTS] sp_name

二、存储函数

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

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

CREATE FUNCTION sp_name([func_parameter[,…]]) RETURNS type routine_body

  • sp_name:指定存储函数的名称
  • func_parameter:指定存储函数的参数
  • RETURNS type :声明存储函数返回值的数据类型; type指定返回值的数据类型
  •  routine_body 指定存储函数的主体部分,也称为存储函数体

在数据库mysql_test中创建 一个存储函数,要求该函数能根据 给定的客户id号返回客户的性别, 如果数据库中没有给定的客户id号 ,则返回“没有该客户”。

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 $$

数据库系统原理(第5章:数据库编程)_第5张图片

 

 

 使用关键字SELECT调用存储函数:SELECT sp_name([func_parameter[, …]])

使用DROP FUNCTION语句删除存储函数:DROP FUNCTION [IF EXISTS] sp_name

你可能感兴趣的:(数据库系统原理(第5章:数据库编程))