在上述语句中,var_name参数表示要声明的变量的名字;参数type表示所要声明变量的类型;default value用来实现设置变量的默认值,如果无该语句默认值为null。在具体声明变量时,可以同时定义多个变量。
3.1.2 赋值变量:
语法形式如下:
语法一:
set var_name=expr[,...]
语法二:
select filed_name[,...] into var_name[,...] from table_name where condition
var_name参数表示所要赋值变量名字,参数expr是关于变量的赋值表达式。在为变量赋值时,可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。
语法二中将查询到的结果赋值给变量,参数filed_name表示查询的字段名,参数var_name表示变量名。将查询结果赋值给变量,该查询语句的返回结果只能是单行。
示例:
declare employee_sal int default 1000; declare employee_sal int default 1000; set employee_sal = 3500; select sal into employee_sal from t_employee where empno=7556;
3.2 操作条件:
3.2.1 定义条件:
语法形式如下:
declare condition_name condition for condition_value condition_value: sqlstate[value] sqlstate_value |mysql_error_code
condition_name参数表示所要定义的条件名称;参数condition_value用来实现设置条件的类型;参数sqlstate_value和mysql_error_code用来设置条件的错误。
3.2.2 定义处理程序:
语法形式为:
declare handler_type handler for condition_value[,...] sp_statement handler_type: continue |exit |undo condition_value: sqlstate[value] sqlstate_value |condition_name |sqlwarning |not found |sqlexception |mysql_error_code
这个语句指定每个可以处理一个或多个条件的处理程序。如果产生一个或多个条件,指定的语句被执行。对一个continue处理程序,当前子程序的执行处理程序语句之后继续。对于exit处理程序,当前begin…end复合语句的执行被终止。undo处理程序类型语句还不被支持。
1. sqlwarning是对所有以01开头的sqlstate代码的速记。
2. not found是对所有以02开头的sqlstate代码的速记。
3. sqlexception 是对所有没有被sqlwarning或not found捕获的sqlstate代码的速记。
3.3 使用游标:
mysql的查询语句可以返回多条记录结果,那么在表达式中如何遍历这些记录结果呢?mysql提供了游标来实现。通过指定由select语句返回的行集合(包括满足该语句的where子句所列条件的所有行),由该语句返回完整的行集合叫结果集。应用程序需要一种机制来一次处理结果集中的一行或连续的几行,而游标通过每次指定一条记录完成与应用程序的交互。
游标可以看做一种数据类型,可以用来遍历结果集,相当是指针或数组的下标。处理结果集的方法可以通过游标定位到结果集的某一行,从当前结果集的位置搜索一行或者一部分行或者结果集中的当前行进行数据修改。
3.3.1 声明游标:
语法形式如下:
declare cursor_name cursor for select_statement;
上述语句中,cursor_name参数表示有游标的名称,参数select_statement表示select语句。因为游标需要遍历结果集中的每一行,增加了服务器的负担,导致游标的效率并不高。如果游标操作的数据超过1万行,那么应该采用其他方式,另外如果使用了游标,还应尽量避免在游标循环中进行表连接操作。
3.3.2 打开游标:
语法形式为:
open cursor_name
//注意,打开一个游标时,游标并不指向第一条记录,而是指向第一条记录的前边。
3.3.3 使用游标:
语法形式如下:
fetch cursor_name into var_name [,var_name] ...
3.3.4 关闭游标:
语法形式如下:
close cursor_name
4. 修改存储过程和函数
对于已经创建好的存储过程和函数,当使用一段时间后,就会需要进行一些定义上的修改。可以通过alter procedure语句实现修改存储过程,通过alter function语句实现修改函数。
4.1 修改存储过程:
语法形式如下:
alter procedure procedure_name [characteristic...]
procedure_name参数表示所要修改存储过程的名字,而characteristic参数指定修改后存储过程的特性,与定义存储过程的该参数相比,取值只能是如下值:
|(contains sql|no sql|reads sql data|modifys sql data) |sql security {definer|invoker} |comment ‘string' )
4.2 修改函数:
语法形式如下:
alter function function_name [characteristic...]
function_name参数表示所要修改函数的名字,而characteristic参数指定修改后的函数特性,与定义函数的该参数相比,取值只能是如下值:
|(contains sql|no sql|reads sql data|modifys sql data)
|sql security {definer|invoker}
|comment ‘string'
5. 删除存储过程和函数
5.1 通过drop语句删除存储过程:
语法形式如下:
drop prcedure proce_name;
5.2 通过drop function语句删除函数:
语法形式如下:
drop function func_name;
更多相关Mysql内容来自木庄网络博客
标签:Mysql
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>
数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。