数据库系统原理(第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中该客户的性别为一个指定的性别
使用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语句把选定列的值直接存储到局部变量中
流程控制语句
- 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语句创建游标
使用open语句打开游标:open cursor_name
使用fetch…into语句读取数据:
使用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 $$
使用关键字select调用存储函数:select sp_name([func_parameter[, …]])
使用drop function语句删除存储函数:drop function [if exists] sp_name
上一篇: centos7安装zabbix3.0超详细步骤解析
下一篇: 今天出差