第八章 数据库编程 存储过程与函数
2017-12-01 11:11
267 查看
本章的重点放在存储过程与自定义函数。主要介绍内容如下:
1、存储过程的概念、如何定义存储过程及调用。
2、自定义函数的定义和使用。
3、存储过程的优缺点。
4、存储过程与函数的区别。
(例子在mysql下实践)、
存储过程
存储过程的概念
存储过程是由过程化的SQL语句书写的过程 , 这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程,使用时只需调用即可。
存储过程创建
例 1: 在mysql下创建一个根据id查询表记录的存储过程:
注意到在mysql中创建存储过程前使用了”delemiter //”将sql语句的结束符变为了“//” , 创建存储过程后又将mysql的默认sql语句结束符变为了“;”,这样在定义存储过程时就能书写多个sql语句。
存储过程的过程体一般习惯用begin开始,end结束。
例 2 :创建一个存储过程,要求从表test中根据删除id 大于输入id的表记录,并返回删除记录的条数和剩余记录条数。
分析 : 这个过程应该一个具有一个输入,多个输出的存储过程
上面的创建存储过程括号里的参数t_id是输入参数,delNums是返回的删除记录条数,remNums剩余记录条数。
存储过程执行
例1 :
例2 :
select @a, @b可以查看存储过程返回结果。
存储过程删除
自定义函数
自定义函数的定义
例1 : 定义一个自定义函数,返回格式为“XXXX年XX月XX日”的当前日期
例2 : 创建一个存储过程,向test表中插入数据,并返回插入后自增的id
可以看到自定义函数时使用returns <类型>指定返回的类型,但只能有一个返回值,但存储过程可通过将返回值存如参数中从而可有多个参数。
自定义函数执行
例1 :
自定义函数删除
存储过程优缺点
优点:
存储过程不像解释执行的SQL语句那样在操作请求时才进行语法分析和优化工作,因而效率更高。存储过程提供了在服务器端快速执行sql的能力。
降低客户机和服务器之间的通信量。存储过程的调用只需要客户机发送调用的存储过程名和参数,服务器执行多条SQL语句后把最终结果返回而不需要一次次的返回多条数据,从而降低了通信量。
方便企业实施规则。企业把规则写入存储过程存入数据库服务器中,便于集中控制和维护,当规则改变时只需要改变规则而不需要再去修改应用程序。
缺点:
1、可移植性差。存储过程是存在数据库服务器上的,存储过程封装业务逻辑将闲置应用程序的移植性。
2、修改麻烦。当存储过程的输入参数或返回值需要改变时,仍然需要去修改存储过程和应用程序。
3、调试困难。
存储过程与自定义函数的区别
存储过程一般实现的功能复杂一些,函数针对性更强
存储过程可返回多个值,函数只能有一个返回值
存储过程限制较少,自定义函数限制较多,许多SQL不能使用。
存储过程编译优化后保存在数据库服务器,直接调用,比自定义函数效率高。
1、存储过程的概念、如何定义存储过程及调用。
2、自定义函数的定义和使用。
3、存储过程的优缺点。
4、存储过程与函数的区别。
(例子在mysql下实践)、
存储过程
存储过程的概念
存储过程是由过程化的SQL语句书写的过程 , 这个过程经编译和优化后存储在数据库服务器中,因此称为存储过程,使用时只需调用即可。
存储过程创建
create procedure 过程名 ([参数1,参数2...]) //存储过程首部 begin <过程化SQL块> //存储过程的具体操作 end
例 1: 在mysql下创建一个根据id查询表记录的存储过程:
delimiter // mysql> create procedure sp_1(IN t_id int) -> begin -> delete from test where id = t_id; -> end// delimiter ;
注意到在mysql中创建存储过程前使用了”delemiter //”将sql语句的结束符变为了“//” , 创建存储过程后又将mysql的默认sql语句结束符变为了“;”,这样在定义存储过程时就能书写多个sql语句。
存储过程的过程体一般习惯用begin开始,end结束。
例 2 :创建一个存储过程,要求从表test中根据删除id 大于输入id的表记录,并返回删除记录的条数和剩余记录条数。
分析 : 这个过程应该一个具有一个输入,多个输出的存储过程
mysql> delimiter // mysql> create procedure delAndRet(IN t_id int,out delNums int,out remNums int) -> begin -> delete from test where id > t_id; -> select row_count() into delNums; -> select count(id) from test into remNums; -> end// mysql> delimiter ;
上面的创建存储过程括号里的参数t_id是输入参数,delNums是返回的删除记录条数,remNums剩余记录条数。
存储过程执行
call 过程名(参数列表)
例1 :
call sp_1(10005)
例2 :
call delAndRet(1000 , @b , @b)
select @a, @b可以查看存储过程返回结果。
存储过程删除
drop procedure 过程名
自定义函数
自定义函数的定义
create function 函数名(参数列表) returns <类型> <SQL 过程块> return 返回结果
例1 : 定义一个自定义函数,返回格式为“XXXX年XX月XX日”的当前日期
create function f2() returns varchar(30) return date_format(now(),'%Y年%m月%d日');
例2 : 创建一个存储过程,向test表中插入数据,并返回插入后自增的id
delimiter // mysql> create function addTest(name varchar(20)) returns int -> begin -> insert into test(name) values(name); -> return last_insert_id(); -> end -> // delimiter ;
可以看到自定义函数时使用returns <类型>指定返回的类型,但只能有一个返回值,但存储过程可通过将返回值存如参数中从而可有多个参数。
自定义函数执行
select 函数名(参数列表)
例1 :
select f2() ;
自定义函数删除
drop function 函数名
存储过程优缺点
优点:
存储过程不像解释执行的SQL语句那样在操作请求时才进行语法分析和优化工作,因而效率更高。存储过程提供了在服务器端快速执行sql的能力。
降低客户机和服务器之间的通信量。存储过程的调用只需要客户机发送调用的存储过程名和参数,服务器执行多条SQL语句后把最终结果返回而不需要一次次的返回多条数据,从而降低了通信量。
方便企业实施规则。企业把规则写入存储过程存入数据库服务器中,便于集中控制和维护,当规则改变时只需要改变规则而不需要再去修改应用程序。
缺点:
1、可移植性差。存储过程是存在数据库服务器上的,存储过程封装业务逻辑将闲置应用程序的移植性。
2、修改麻烦。当存储过程的输入参数或返回值需要改变时,仍然需要去修改存储过程和应用程序。
3、调试困难。
存储过程与自定义函数的区别
存储过程一般实现的功能复杂一些,函数针对性更强
存储过程可返回多个值,函数只能有一个返回值
存储过程限制较少,自定义函数限制较多,许多SQL不能使用。
存储过程编译优化后保存在数据库服务器,直接调用,比自定义函数效率高。
相关文章推荐
- 数据库的几个问题存储过程触发器函数创建以及sql优化
- 数据库中函数和存储过程的区别
- MySQL导出数据库、数据库表结构、存储过程及函数
- mysql 导入导出数据库以及函数、存储过程
- mysql导出数据库及存储过程及函数
- mysql5.0.22-log的内核数据库mysql误用mysql5.1.26-rc,引起存储过程与函数无法导入
- 数据库学习之存储过程及函数。
- mysql 导入导出数据库以及函数、存储过程 【转】
- mysql 导入导出数据库以及函数、存储过程
- 数据库事务和存储过程已经函数的概念以及使用方法
- SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
- SQL Server中的CLR编程——用.NET为SQL Server编写存储过程和函数
- 返回数据库数据的存储过程函数(5个参数)(SQL Server)
- mysql 导入导出数据库以及函数、存储过程的介绍
- 大象数据库SQL存储过程(函数)
- 数据库的存储过程以及函数的区别
- 从已有数据库生成脚本来获得生成数据表、视图、函数、存储过程以及触发器的SQL语句
- 本人写的数据库常用函数(存储过程中经常要用到)
- mysql 导入导出数据库以及函数、存储过程的介绍
- 返回数据库数据的存储过程函数(4个参数)(SQL Server)