欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-07-05 17:11:06
存储过程是一组为了完成某项特定功能的SQL语句集, 其实质就是一段存储在数据库中的代码。 它可以由声明式的sql语句和过程式sql语句组成。 ......

一、存储过程

概念:存储过程是一组为了完成某项特定功能的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章:数据库编程)

 

 

 

使用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章:数据库编程)

 

 

流程控制语句

  • 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章:数据库编程)

 

 

 

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

使用fetch…into语句读取数据:

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

 

 

 

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

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

使用call语句调用存储过程

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

 

 

 调用数据库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章:数据库编程)

 

 

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

使用drop function语句删除存储函数:drop function [if exists] sp_name