第13章存储过程与存储函数;;存储过程简介
1)什么是存储过程;存储过程的好处:;;(3)可防止对表的直接访问。
可以禁止对表本身的访问,只赋予用户对相关存储过程的访问权限。限制客户端只能通过存储过程才能访问表,可以事前防止对表的一些预想不到的操作。;(4)可将数据库的处理黑匣子化。
构建应用程序时,在应用程序中编写对数据库进行的复杂处理,是减低程序可读性的重要原因。但是,如果将这些处理以存储过程的形式编写,并保存在数据库中,应用程序的处理将会简洁许多。
应用程序中完全不用考虑存储过程的内部详细处理,只需要知道调用哪个存储过程就可以了。;使用createprocedure创建存储过程,具体语法如下:;创建存储过程参数说明:;【示例13-1】创建一个对表emp的雇员姓名列(ename)进行模糊检索的存储过程;【示例13-2】检索雇员姓名中包含S的雇员,执行结果如下
;【示例13-3】检索所有的雇员,执行结果如下
;
;检索所有的雇员,执行结果如下
;【示例13-4】将取得的雇员数通过输出参数p_cnt返回
;【示例13-4】执行结果如下:
;【示例13-5】测试out参数调用存储过程,执行结果如下;2)定义INOUT参数;【示例13-6】使用INOUT参数;【示例13-6】执行结果;1.单分支;2.双分支;3.多分支;多分支的使用;【示例13-7】测试多重if;【示例13-7】执行结果;case命令语法结构如下:;【示例13-8】测试case使用:;【示例13-8】执行结果;5)定义本地变量;使用DECLARE语句,声明变量语法格式如下:;【示例13-9】可以声明一个名为total_sale的变量,数据类型为INT,默认值为10;【示例13-9】执行结果
;【示例13-10】声明了两个整数变量x和y,并将其默认值设置为0。;【示例13-10】执行结果;【示例13-11】分配total_count变量的值为10;【示例13-11】执行结果;【示例13-12】使用SELECTINTO语句将查询的结果分配给一个变量;【示例13-12】执行结果;作用域;while语句的使用,语法格式如下:;【示例13-13】计算参数p_num之内的和,例如100内的和;【示例13-13】执行结果;REPEAT循环的使用,语法格式如下;【示例13-14】计算参数p_num的阶乘;【示例13-14】执行结果;LOOP循环的使用,语法格式如下:;【示例13-15】loop循环实例如下;【示例13-15】执行结果;删除创建的存储过程,语法格式如下;;所谓函数都是按照事先决定的规则进行处理,然后将结果返回的单功能机制。例如,我们要计算字符串”北京尚学堂!”的长度,就必须使用如char_length这样的长度计算函数。;通过将字符串[北京尚学堂!]作为输入参数传给函数char_length,然后返回执行结果数字6。这样的函数在使用时非常方便,但是数据库标准提供的函数数量毕竟有限,在使用过程中经常会出现找不到合适函数的情况。这个时候,用户就可以根据需要自定义函数,大多数数据库都提供存储函数的功能,允许用户自己定义函数。
存储函数(StoredFunction)顾名思义,就是保存(Stored)在数据库中的函数(Function),定义存储函数的要点几乎与定义存储过程完全相同;定义存储函数使用CREATEFUNCATION命令,语法如下;1)参数只有输入型;2)向调用方返回结果值;【示例13-1】创建存储函数;【示例13-1】执行结果;【示例13-2】调用存储函数;删除存储函数,语法格式如下;【示例13-3】删除存储函数;本章总结;本章总结;本章作业;本章作业;