9.1 创建存储过程和函数
9.1.1 创建存储过程
创建存储过程,需要使用CREATE PROCEDURE语句,基本语法:
CREATE PROCEDURE 存储过程名称 ([proc_parameter])
[characteristics ...] routine_body备注:
proc_parameter:为指定存储过程的参数列表
characteristics:是存储过程特性
routine_body:是sq代码内容,可以用BEGIN...END表示sql开始结束时间
proc_parameter列表形式如下:
[IN | OUT | INOUT] 参数名 参数类型备注:
IN表示输入参数,OUT表示输出参数,INOUT表示即可输入也可输出
characteristics指定存储过程特性,有以下取值:
LANGUAGE SQL:说明这部分有SQL组成,SQL是唯一值
[NOT] DETERMINISTIC:指明存储过程执行的结果是否确定:确定,相同输入得到相同输出;不确定,相同输入可能得到不同输出,默认不确定
{CONTAINS SQL | NO SQL | READS SQL DATE | MODIFIES SQL DATE}:指明子程序sql使用限制,按照顺序依旧代表如下意思:子程序包含sql,不包含写数据的语句;子程序不包含SQL语句;子程序包含读写数据的语句;子程序包含写数据语句;默认子程序不包含sql
SQL SECURITE {DEFINER | INVOKER}:指明谁有权限来执行,DEFINER表示只有定义者才可以执行,INVOKER表示拥有权限的调用者才可以执行,默认定义者
COMMENT'string':注释信息,描述存储过程或函数
9.1.2 创建存储函数
创建存储过程,要使用CREATE FUNCTION语句,基本语法格式:
备注:对应的指定内容可以看一下上面的备注
举例:
注意:如果
RETURN里面返回的类型不同于RETUENS定义的类型,会被强转注意:指定参数
IN、OUT和INOUT只对PROCEDURE是合法的。(FUNCTION中总是默认为IN参数)。RETURNS子句只能对FUNCTION做指定,对于函数而言这是强制的。它用来指定函数的返回类型,而且函数体必须包含一个RETURN value语句。
9.1.3 变量的使用
变量可以在子程序中声明并使用,变量作用范围在BETWEEN...END程序中
定义变量
注意:默认值不填,初始值为NULL
为变量赋值
通过
SET赋值通过
SELECT...INTO赋值备注:col_name表示字段名;
var_name表示定义的变量名;
tab_expr表示查询条件表达式,包括表名与where语句
9.1.4 定义条件和处理程序
定义条件
备注:condition_name表示条件名称
condition_type表示条件类型
sqlstart_value | mysql_error_code表示MySQL的错误
定义处理程序
语法:
备注:handler_type错误处理方式,
CONDITION表示不处理,EXIT表示有错退出,UNDO表示有错回滚 condition_value表示错误类型:
SQLSTART[VALUE] sqlstart_value表示5个字符的错误值,
condition_name表示DECLARE_CONDITION定义的错误条件名称,
SQLWARNING匹配所有01开头的SQLSTART错误代码,
NOT FOUND匹配所有02开头的SQLSTART错误代码,SQLEXCEPTION匹配没被SQLWARNING、NOT FOUND捕获的SQLSTART错误代码,
mysql_error_code匹配数值类型错误码举例:
9.1.5 光标的使用
光标的声明
备注:cursor_name表示光标名称
select_statement表示SQL语句内容,用于创建光标结果集
打开光标
使用光标
关闭光标
注意:光标只能在存储过程和函数中使用
9.1.6 流程控制的使用
IF语句(判断)注意:不同于IF()函数
结尾要用END IF来结束
CASE语句(判断)LOOP语句(循环)LEAVE语句(跳出循环,类似break)备注:例子中,表示每次循环都是count+1,当count等于50时候,终止循环
ITERATE语句(跳出循环,类似continue)注意:可以使用在
LOOP、REPEAT和WHILE中REPEAT语句(带条件判断的循环)WHILE语句
最后更新于
这有帮助吗?