数据库原理及应用知识点整理——存储过程与游标

合集下载

MySQL中的游标操作与存储过程使用方法

MySQL中的游标操作与存储过程使用方法

MySQL中的游标操作与存储过程使用方法引言对于开发者来说,数据操作是一个非常重要的任务。

在MySQL中,游标操作和存储过程是两个非常常见的功能,它们可以帮助我们更高效、更灵活地操作和管理数据。

本文将介绍MySQL中的游标操作和存储过程的使用方法,帮助读者更好地应用这些功能。

第一部分:游标操作什么是游标?游标是一种数据库对象,它用于处理数据集。

通过游标,我们可以逐行处理查询结果,而不是一次性地将所有结果返回。

这对于处理大量数据或者需要在结果集上进行逐行处理的情况非常有用。

游标的基本使用方法在MySQL中,使用DECLARE语句声明游标,使用FETCH语句获取游标的下一行数据,使用CLOSE语句关闭游标。

下面是一个简单的示例:```DECLARE cursor_name CURSOR FOR SELECT column1, column2 FROMtable_name;OPEN cursor_name;FETCH cursor_name INTO variable1, variable2;CLOSE cursor_name;```在这个示例中,我们首先声明了一个名为"cursor_name"的游标,然后打开游标并获取第一行数据到变量"variable1"和"variable2"中,最后关闭游标。

游标的类型MySQL支持两种类型的游标:FORWARD_ONLY和SCROLL。

FORWARD_ONLY游标只能向前遍历结果集,而SCROLL游标可以以任何顺序遍历结果集,包括向前、向后和随机访问。

使用游标实现分页查询游标非常适合实现分页查询功能。

通过游标,我们可以在一个较大的结果集中,按照一定的页大小逐页取出数据,而不需要一次性将所有数据加载到内存中。

下面是一个使用游标实现分页查询的示例:```DECLARE page_cursor SCROLL CURSOR FOR SELECT column1, column2 FROM table_name LIMIT start_index, page_size;OPEN page_cursor;FETCH page_cursor INTO variable1, variable2;WHILE NOT done DO-- 处理当前行数据...FETCH page_cursor INTO variable1, variable2;-- 判断是否还有下一页数据IF no_more_data THENSET done = TRUE;END IF;END WHILE;CLOSE page_cursor;```在这个示例中,我们使用了SCROLL游标,并通过LIMIT子句指定了查询的起始位置和页大小。

SQL Server 2012数据库原理与应用第十讲 存储过程、触发器和游标

SQL Server 2012数据库原理与应用第十讲 存储过程、触发器和游标

Output示例
• • • • • • • • • • • • • • • • •
Alter Proc P_Save_ClassInfo (@ClassID Varchar(10),@ClassName Varchar(50), @ClassDesc Varchar(100),@Msg Varchar(20) output) as if Exists(Select * From ClassInfo Where ClassID=@ClassID) begin Update ClassInfo Set ClassName=@ClassName,ClassDesc=@ClassDesc Where ClassID=@ClassID set @Msg='修改成功' end Else begin Insert Into ClassInfo (ClassID,ClassName,ClassDesc) Values (@ClassID,@ClassName,@ClassDesc) set @Msg='添加成功' end
10.1.5 执行存储过程

语法
– [ [ EXEC [ UTE ] ] { [ @return_status = ] { procedure_name [ ;number ] | @procedure_name_var } [ [ @parameter = ] { value | @variable [ OUTPUT ] | [ DEFAULT ] ] [ ,...n ] [ WITH RECOMPILE ]
存储过程示例
• Create Procedure P_GetUp90 • as • Select * • From StudScoreInfo • Where StudScore>=90

MySQL存储过程和游标

MySQL存储过程和游标

MySQL存储过程和游标⼀、存储过程什么是存储过程,为什么要使⽤存储过程以及如何使⽤存储过程,并且介绍创建和使⽤存储过程的基本语法。

什么是存储过程:存储过程可以说是⼀个记录集,它是由⼀些T-SQL语句组成的代码块,这些T-SQL语句代码像⼀个⽅法⼀样实现⼀些功能(对单表或多表的增删改查),然后再给这个代码块取⼀个名字,在⽤到这个功能的时候调⽤他就⾏了。

存储过程的好处:1. 由于数据库执⾏动作时,是先编译后执⾏的。

然⽽存储过程是⼀个编译过的代码块,所以执⾏效率要⽐T-SQL语句⾼。

2. ⼀个存储过程在程序在⽹络中交互时可以替代⼤堆的T-SQL语句,所以也能降低⽹络的通信量,提⾼通信速率。

3. 通过存储过程能够使没有权限的⽤户在控制之下间接地存取数据库,从⽽确保数据的安全存储过程的基本语法:--------------------创建存储过程------------------------------------CREATE PROCEDURE procedure_name( IN|OUT variable data_type)BENGINsql_statement;......END;-- MySQL⽀持IN(传递给存储过程)、OUT(从存储过程传出)-- variable 变量-- data_type 参数的数据类型-- sql_statement 中 INTO parameter 的把值保存到相应的变量中(通过INTO关键字)--------------------执⾏存储过程------------------------------------CALL procedure_name(@parameters);--------------------删除存储过程------------------------------------DROP PROCEDURE procedure_name;-- 如果指定的过程不存在,则DROP PROCEDURE将会产⽣⼀个错误。

数据库-存储过程-游标-函数

数据库-存储过程-游标-函数

数据库-存储过程-游标-函数⼀、存储过程SQL99标准提出的SQL-invoked-rountines的概念,它开分为存储过程与函数,这⾥⾸先介绍存储过程存储过程分为三类:系统存储过程(如:sp_help)、⾃定义存储过程、扩展存储过程存储过程可以理解为⼀个SQL语句块,完成⼀些复杂的功能,当然可以包含应⽤程序的业务,⽐如:分页,⽣成订单号等,存储过程可以接收应⽤程序传递的参数,并将查询的结果返回给应⽤程序1、存储过程的优点:1)、运⾏效率⾼,因为存储过程不会在每⼀次调⽤时都解释执⾏,随便说⼀句,SQL执⾏后的执⾏计划会放在缓存中,这样下⼀次相同的SQL执⾏就不⽤再次优化了,从⽽加快速度2)、存储过程降低了客户机与服务器的通信量,使⽤存储过程,就不⽤在应程序中拼SQL传回服务器,只须要存储过程名与参数就可以了3)、⽅便实施企业规则,可以在存储过程⾥加⼊业务逻辑2、存储过程的使⽤(重复使⽤)创建:create proc pc_whcasselect * from whc/*执⾏*/exec pc_whc⼆、游标游标可以理解为⼀个"指针",其指向的是⼀条记录,当⽤select语句得到⼀个结果集时,我们可以将它放到⼀个游标中,然后通过移动游标来读取每⼀条数据,并进⾏处理,感觉有点"遍历"数据游标的使⽤:1、定义游标:declare cursor_name cursorFor select 语句;2、打开游标:open cursor_name3、循环访问游标中的每⼀⾏数据:Fetch next from cursor_name into @参数列表4、游标的状态:@@fetch_status,⽤于判断游标fetch的状态,当为0时正常,不为⼀时异常5、关闭并释放资源例:declare @whcId nchar(5),@whc int;/*定义⼀个游标*/declare whc_cursor cursorfor select CustomerID,EmployeeID from dbo.Orders/*打开⼀个游标*/open whc_cursor/*移动指针,将数据放到变量中*/fetch next from whc_cursor into @whcId,@whcwhile @@fetch_status = 0beginprint @whcid+' '+convert(nchar(5),@whc)fetch next from whc_cursor into @whcId,@whcendclose whc_cursordeallocate whc_cursor三、函数函数相信⼤家都很清楚了,传递参数,然后返回⼀个结果,SQL中的函数也⼤致差不多,返回时使⽤ruturn,可以是int、varchar,table等类型,有了函数就可以把⼀些功能在⼀起,⽐如对数据的处理等函数的创建(例⼦说明):create function fun_whc(@str varchar(50))returns varchar(100)asbegindeclare @List varchar(200)set @List=@str+'My friend'--返回值return @Listend--调⽤select DemoName,dbo.fun_whc(DemoName) from whc最后要说明的是,⼩弟初学,哪⾥有不对的请指出,感激不尽。

数据库中的游标存储过程和触发器

数据库中的游标存储过程和触发器

数据库中的游标存储过程和触发器游标、存储过程和触发器是数据库中常用的三种特殊对象。

游标用于在数据库管理系统中对查询结果进行逐行处理,存储过程是一组预定义的SQL语句集合,可以被重复调用执行,而触发器则是在数据库中的特定事件发生时自动执行的一段代码。

首先,我们来了解一下游标。

游标是一个数据库概念,它可以被看作是一个指向查询结果集的指针。

通过游标,我们可以在数据库内部对查询结果集进行逐行处理,从而实现对数据的操作。

游标的使用可以有效地减少数据库服务器的负担,提高数据库性能。

在一些需要对批量数据进行处理的场景下,游标可以发挥重要作用。

例如,当需要对查询结果逐行进行计算、更新或者删除时,可以使用游标定位到每一条记录,并对其进行操作。

接下来,我们了解一下存储过程。

存储过程是一组预定义的SQL语句的集合,它们一起执行一些特定的任务。

存储过程可以包含流程控制、循环结构、条件判断等逻辑,还可以接受参数并返回结果。

存储过程的好处在于可以实现代码复用,提高数据库的性能和可维护性。

通过存储过程,我们可以将常用的SQL操作封装起来,减少了网络传输的开销,提高了数据访问的效率。

另外,存储过程还可以实现权限控制,通过调用存储过程来间接访问数据库,可以避免直接在应用程序中操作数据库,增强了数据的安全性。

最后,我们来了解一下触发器。

触发器是在数据库中特定的事件发生时自动执行的一段代码。

这些事件可以是INSERT、UPDATE或者DELETE操作。

触发器通常被用来在数据库表的数据发生变化时执行相应的操作。

它可以用来保证数据库的数据一致性和完整性,触发器能够在数据被修改之前或之后自动执行,并且可以在代码中加入逻辑判断和业务处理。

例如,在一个订单表中,我们可以定义一个触发器,在插入一条新订单数据时,自动计算订单总金额并更新到订单的总金额字段中。

总结一下,游标、存储过程和触发器是对数据库进行处理和控制的重要工具。

游标可以让我们逐行处理查询结果集,存储过程可以定义逻辑处理、实现代码的复用,而触发器则可以在数据库表的特定事件发生时自动执行一段代码。

数据库中的游标与存储过程优化

数据库中的游标与存储过程优化

数据库中的游标与存储过程优化引言在今天的信息时代,数据被认为是最重要的资产之一。

对于企业来说,对数据的存储和管理至关重要。

数据库是一种被广泛使用的数据存储和管理系统,它提供了一种结构化方式来有效地组织和检索数据。

然而,在处理大量数据时,数据库的性能可能成为瓶颈。

本文将讨论数据库中的游标和存储过程的优化技巧,以提高数据库的性能。

第一部分:数据库游标的优化1. 游标的概念和用途游标是一种在数据库中对结果集进行定位和遍历的手段。

它可以逐行处理结果集,并允许在结果集中执行增删改查操作。

游标提供了一个灵活的方式来处理复杂的数据操作。

然而,不正确使用游标可能会导致数据库性能下降。

2. 避免使用不必要的游标在编写存储过程或查询时,需要仔细考虑是否真正需要使用游标。

过多的游标会增加数据库的负载和开销。

如果可以使用其他方式来实现相同的目的,如使用集合或连接查询,应尽量避免使用游标。

3. 使用静态游标在游标的类型中,静态游标是最快的。

静态游标在检索结果集之前会将结果集整体获取到客户端,并将其缓存在内存中。

这样可以避免每次获取一个记录的延迟。

因此,如果结果集不是很大,并且可以全部缓存在内存中,使用静态游标可以提高性能。

4. 使用适当的游标选项游标有多个选项可以配置,以满足不同的需求。

例如,设置游标的敏感度可以控制对结果集的修改是否立即反映在游标的遍历中。

另外,设置游标的锁定类型可以控制对结果集的并发访问控制。

通过正确配置这些选项,可以提高游标的性能和并发处理能力。

第二部分:存储过程的优化1. 存储过程的基本原则存储过程是一组预定义的数据库操作步骤。

它们常用于封装复杂的业务逻辑,并通过减少网络通信来提高性能。

然而,存储过程的性能也受到多个因素的影响。

优化存储过程需要遵循一些基本原则。

2. 避免频繁的存储过程调用存储过程的调用涉及网络通信和数据库连接的开销。

如果频繁地调用存储过程,则会增加这些开销,降低性能。

因此,应当尽量减少存储过程的调用次数。

MySQL必知必会笔记存储过程游标触mysql 创建存储过

MySQL必知必会笔记存储过程游标触mysql 创建存储过

MySQL必知必会笔记存储过程游标触mysql 创建存储过第二十三章使用存储过程MySQL5 中添加了存储过程的支持。

大多数SQL语句都是针对一个或多个表的单条语句。

并非所有的操作都怎么简单。

经常会有一个完整的操作需要多条才能完成存储过程简单来说,就是为以后的使用而保存的一条或多条MySQL语句的集合。

可将其视为批文件。

虽然他们的作用不仅限于批处理。

为什么要使用存储过程:优点1 通过吧处理封装在容易使用的单元中,简化复杂的操作2 由于不要求反复建立一系列处理步骤,这保证了数据的完整性。

如果开发人员和应用程序都使用了同一存储过程,则所使用的代码是相同的。

还有就是防止错误,需要执行的步骤越多,出错的可能性越大。

防止错误保证了数据的一致性。

3 简化对变动的管理。

如果表名、列名或业务逻辑有变化。

只需要更改存储过程的代码,使用它的人员不会改自己的代码了都。

4 提高性能,因为使用存储过程比使用单条SQL语句要快5 存在一些职能用在单个请求中的MySQL元素和特性,存储过程可以使用它们来编写功能更强更灵活的代码换句话说3个主要好处简单、安全、高性能缺点1 一般来说,存储过程的编写要比基本的SQL语句复杂,编写存储过程需要更高的技能,更丰富的经验。

2 你可能没有创建存储过程的安全访问权限。

许多数据库管理员限制存储过程的创建,允许用户使用存储过程,但不允许创建存储过程存储过程是非常有用的,应该尽可能的使用它们执行存储过程MySQL称存储过程的执行为调用,因此MySQL执行存储过程的语句为CALL .CALL接受存储过程的名字以及需要传递给它的任意参数CALL productpricing(@pricelow , @pricehigh , @priceaverage);//执行名为productpricing的存储过程,它计算并返回产品的最低、最高和平均价格创建存储过程CREATE PROCEDURE 存储过程名()一个例子说明:一个返回产品平均价格的存储过程如下代码:CREATE PROCEDURE productpricing()BEGINSELECT Avg(prod_price) AS priceaverageFROM products;END;//创建存储过程名为productpricing,如果存储过程需要接受参数,可以在()中列举出来。

存储、游标的简介及嵌套使用

存储、游标的简介及嵌套使用

存储、游标的简介及嵌套使⽤1.存储过程简介 ⼀个存储过程是⼀个可编程的函数,它在数据库中创建并保存。

它可以有SQL语句和⼀些特殊的控制结构组成。

当希望在不同的应⽤程序或平台上执⾏相同的函数,或者封装特定功能时,存储过程是⾮常有⽤的。

数据库中的存储过程可以看做是对编程中⾯向对象⽅法的模拟。

它允许控制数据的访问⽅式。

存储过程通常有以下优点: (1).存储过程增强了SQL语⾔的功能和灵活性。

存储过程可以⽤流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。

(2).存储过程允许标准组件是编程。

存储过程被创建后,可以在程序中被多次调⽤,⽽不必重新编写该存储过程的SQL语句。

⽽且数据库专业⼈员可以随时对存储过程进⾏修改,对应⽤程序源代码毫⽆影响。

(3).存储过程能实现较快的执⾏速度。

如果某⼀操作包含⼤量的Transaction-SQL代码或分别被多次执⾏,那么存储过程要⽐批处理的执⾏速度快很多。

因为存储过程是预编译的。

在⾸次运⾏⼀个存储过程时查询,优化器对其进⾏分析优化,并且给出最终被存储在系统表中的执⾏计划。

⽽批处理的Transaction-SQL语句在每次运⾏时都要进⾏编译和优化,速度相对要慢⼀些。

(4).存储过程能过减少⽹络流量。

针对同⼀个数据库对象的操作(如查询、修改),如果这⼀操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调⽤该存储过程时,⽹络中传送的只是该调⽤语句,从⽽⼤⼤增加了⽹络流量并降低了⽹络负载。

(5).存储过程可被作为⼀种安全机制来充分利⽤。

系统管理员通过执⾏某⼀存储过程的权限进⾏限制,能够实现对相应的数据的访问权限的限制,避免了⾮授权⽤户对数据的访问,保证了数据的安全。

2.存储过程简单实例1CREATE PROCEDURE `procedure_select_pay_success`() -- 创建存储过程2BEGIN-- 开始存储过程3SELECT*FROM ibsp_balance_account_data WHERE PAY_STATUS="2"; -- 调⽤的sql内容4END-- 结束存储过程56-- 调⽤存储过程7 CALL procedure_select_pay_success();89-- 删除存储过程10DROP PROCEDURE procedure_select_pay_success;3.游标简介 游标实际上是⼀种能从包括多条数据记录的结果集中每次提取⼀条记录的机制。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

存储过程与游标
存储过程
一、存储过程的概念
1、概念:是存储在数据库中的一种编译对象,是一组完成特定功能的SQL语句集,编译
后存储在数据库中,可以被客户机管理工具、应用程序和其他存储过程调用。

2、存储过程的主要优点:封装性、可增强SQL语句的功能和灵活性、可减少网络流量、
高性能、提高数据库的安全性和数据的完整性
二、创建存储过程的语法
1、创建存储过程:
CREATE PROCEDURE 存储过程名(参数1,参数2,……)
BEGIN
存储过程体
END
存储过程名以“proc_”为前缀或以“_proc”为后缀。

没有参数也要写括号,括号内包含多个参数时格式为:[ in | out | inout ] 参数名参数类型,分别对应输入参数(作为执行条件)、输出参数(用于存放存储过程执行完需要返回的操作结果)、输入/输出参数(二者皆可)
注意:参数的取名不要与数据表的字段名相同,会报错。

2、存储过程体常用语法有declater声明局部变量、set为局部变量赋值、select…into
加班费查询到的值直接存储到局部变量中、定义错误处理程序、使用流程控制语句实现复杂业务逻辑、使用游标。

3、declter 变量名数据类型 default ‘’;
4、set 变量名 = 变量初始值;
5、select 指定列名[ ] into 指定要复制的变量名[ ] select 语句中的from子句及后面的条件语句部分。

三、定义错误触发条件和错误处理程序(作用:提高语言的安全性)
1、定义错误处理程序:
(1)定义错误触发条件:
方法一:使用sqlstate_value (长度为5的字符串类型的错误代码)
DECLARE 异常名称 CONDITION FOR SQLSTATE ‘’;
方法二:使用mysql_error_code(数值类型错误代码)
DECLARE 异常名称 CONDITION FOR 值;
(2)定义错误处理程序:
DECLARE CONTINUE | EXIT | UNDO HANDLER FOR 错误类型[…] 一些存储过程或函数的执行语句
CONTINUE 表示遇到错误不处理,继续执行;EXIT 表示遇到错误马上退出;UNDO 表示遇到错误后撤回之前的操作,MySQL 暂不执行这种处理方式。

2、错误类型:
(1)sqlstate SQLSTATE_value :
捕获该错误类型异常:
declare continue handler for sqlstate ‘变量赋值’ set @ info= ‘输出变量名’;
(2)mysql_error_code :
捕获该错误类型异常:
declare continue handler for 数值 set @ info = ‘输出变量名’;
(3)condition_name :
先定义条件,然后捕获该错误类型异常:
declare 输出变量名 condition for 变量赋值;
或者
declare continue handler for 输出变量名 set @ info = ‘输出变量名’;
(4)sqlwarning :匹配所有以01开头的SQLSTATE 错误代码
使用sqlwarning 捕获该错误类型异常:
declare exit handler for sqlwarning set @ info = ‘error’;
(5)not found :匹配所有以02开头的SQLSTATE错误代码
使用not found 捕获该错误类型异常:
declare exit handler for not found set @ info = ‘输出变量名’;
(6)sqlexception :
使用sqlexception 捕获该错误类型异常:
declare exit handler for sqlexception set @ = ‘error’;
四、存储过程的调用
1、call 存储过程名 [ 参数列表 ];
参数列表中的参数个数、类型和顺序应该和被调用的存储过程中的参数个数、类型和顺序保持一致,名称不需要一致。

2、select @ 参数名;打印参数
3、in参数(输入参数)的传入值可能是常量或会话变量;
out(输出参数)的传出值只能是会话变量;
inout参数的值只能是会话变量。

(inout参数必须设置为一个变量,且必须先定义为会话变量并初始化之后,再作为参数传递给存储过程,否则设置该参数为常量时将无法接收输出值。


4、调用存储过程的语句格式大致为以下两种:
第一种:
call 存储过程名(参数列表);
select @ 参数;
第二种:
set @参数1 = ‘数值1’;
set @参数2 = ‘数值2’;
call 存储过程名 (参数列表);
select @ 需要打印的参数;
返回值的获取是在call语句,返回值的打印是在select语句;
call语句和select语句都是单独提交执行的,但是这两条语句都属于同一个会话;
使用会话变量可以存储上一条执行语句的值,以便后面调用。

五、游标的概念
1、游标是一种能从select结果集中逐行提取记录的机制,也因此与select语句密切相关。

MySQL中游标只存在存储过程以及函数中。

六、游标的使用方法
1、使用游标的步骤为;声明游标、打开游标、提取游标中的数据、关闭游标。

2、游标的相关语法为:
(1)声明游标:
DECLARE 游标名 CURSOR FOR SELECT 语句;
SELECT 语句返回的结果集是一行或多行记录,使用DECLARE语句声明游标后并不会直接执行SELECT语句,MySQL服务器中并没有SELECT语句对应的结果集。

注:该语句声明一个游标,也可以在存储过程中定义多个游标,但是一个BEGIN-END语句中每一个游标都必须有唯一的名字。

(2)打开游标:
OPEN 游标名;
用该语句打开游标后,与该游标对应的SELECT语句将被执行,MySQL服务器中将存放SELECT语句查询到的结果集,但是一个游标仅能打开一次。

(3)提取游标中的数据:
FETCH 游标名 INTO 变量名1,[,变量名2 ……];
该语句使用前需要在BEGIN…END语句块的开头处声明,FETCH语句是将游标指向的一行数据赋给一些变量,所以要求变量的个数、类型和顺序必须与声明游标时使用的SELECT语句
返回的结果集中的字段个数、类型和顺序保持一致。

注:游标的自定义错误处理程序应该放在声明游标之后;游标通常结合错误处理程序一起使用,以便结束“游标”的遍历。

(4)关闭游标:
close 游标名;
该操作的优点在于释放游标打开时产生的结果集,节省MySQL服务器的内存空间。

即使游标没有被明确地关闭,那么它将会被打开的BEGIN-END语句块关闭。

七、管理存储过程
1、管理存储过程主要分为:查看存储过程的信息、根据需要修改存储过程、删除不需要的存储过程。

2、存储过程相关的语法:
(1)查看存储过程信息:
查看存储创建语句:SHOW CREATE PROCEDURE 存储过程名;
查看所有存储过程的状态:SHOW PROCEDURE STATUS[ LIKE’pattem’];
SHOW PROCEDURE STATUS 可以查看当前服务器连接下的所有存储过程的状态,
[ LIKE’pattern’]参数用来匹配存储过程的名称。

(2)修改存储过程:MySQL中已创建的存储过程不能修改,只能删除后重新创建。

(3)删除存储过程:
DROP PROCEDURE [IF EXISTS] [数据库名.] 存储过程名;
[IF EXISTS] 避免在没有存储过程的情况下删除存储过程而报错;
[数据库名.] 用以在删除存储过程时可以指定数据库,如果省略则默认为当前数据库。

八、存储过程与自定义函数的比较
1、在MySQL中,存储过程和自定义函数都被称为存储程序,且二者都可以重复使用以减少数据库开发人员的工作量。

2、自定义函数和存储过程在使用时应该注意的几点:
(1)一般来说,存储过程可实现的功能比自定义函数要复杂一些,功能强大,可以执行包括修改表等一系列的数据库操作;
用户自定义函数所能够实现的功能针对性比较强,但是它不能用于执行一组修改全局数据状态的操作。

(2)函数只能返回一个值,存储过程可以返回多个值。

(3)函数只能有输入参数,存储过程可以有IN、OUT、INOUT三个不同类型的参数。

(4)函数声明时需要描述返回值类型,且函数体中必须包含一个有效的RETURN语句存储过程声明时不需要返回类型。

(5)函数可以嵌入SQL语句中(如SELECT语句),作为查询语句的一个部分来使用,而存储过程一般是作为一个独立的部分来执行(call语句执行)。

相关文档
最新文档