Mysql:语法:存储程序(存储过程、存储函数、视图、触发器、计划任务)
2009-06-08 14:02
676 查看
存储程序分类
存储过程
存储函数
视图
触发器
计划任务
在mysql.exe客户端里写存储程序的";"分割符问题
这个问题来自mysql.exe客户端本身以";"作为语句的分隔符(结束符)本身。而大部分的管理、开发mysql的应用程序均类似于mysql.exe,所以必须通过delimiter这个mysql服务器可识别的命令来临时修改服务器认可的有效语句分隔符
存储程序组成结构
[label name]
begin
[declare 普通变量|declare异常别名];
[declare 异常别名|declare普通变量];
[declare 游标;]
[declare 异常处理;]
[begin end 复合语句;]
[循环语句;]
[条件语句;]
......
end [{lable name}]
//
declare本地变量
declare va11 [,var2] [,...] date_type [default value --可以是表达式、常量]
本地变量声明时要注意先后顺序:普通变量、游标、操作符
本地变量可以一次声明同类型的多个变量 --类似于c语言,不同于postgresql、oracle;不可以指定[not] null 约束;不可以声明为constant 变量
本地变量可以有初始化的default值,否则为null
本地变量可以向内层begin end 符合语句传递,除非她被内层同名变量overide
本地变量名字不要和表列同名,在过程内,本地变量总是优先被采用
set变量赋值
set var1 = value1 [,var2 = value2] [,....]
mysql的set语句可以对本地变量、系统变量、用户自定义变量赋值,而不仅仅是本地变量!
select变量赋值 必须返回0行或 1 行 记录
select col1 [,col2] [,exp1] [,exp2] [,....] into val1 [,val2] [,val3] [,val4] [,....] from table_express
如果select没有返回数据,mysql有no data 的警告:warning with error code 1329 产生,变量保持原值
如果select返回多行数据,mysql或发生错误!可以通过limit 1 来限制。
mysql的异常处理
declare conditon_name condition for {sqlstate [value] 'sqlvalue'|mysql_error_code} --定义异常:目的是找一个含义更明显或更适合的名称;可理解为别名。
declare {continue|exit|undo} handler for {sqlstate [value] 'sqlvalue'|mysql_error_code|conditon_name
|sqlwarning|notfound|sqlexception} [,....] --定义异常处理mysql的异常处理
类似于其他过程化sql语言的错误处理,只是结构和使用方法不同(postgresql、oracle都是固定的块结构的一可选部分exception;
sqlserver是@@error 或try catch final)
这个handler可以和多个条件关联,类似于postgresql、oracle的when ... when ... when others...
handler的sqlwarning 是 "01xxx"类的错误
handler的not found 是 "02xxxx"类的错误
handler的sqlexception 是 除了'00000'、'01xxxx'、"02xxxx"类的错误
注意sqlstate value ='00000' 或 mysql_error_code=0 表示操作成功,通常不应该去使用的!
handler的continue表示当相关联的块的错误条件发生时、继续从出错的语句下一个语句执行;exit表示发生错误,立即终止程序的执行;undo目前尚未实现!
没有handler的块 或 定义了exit处理(不管是内层还是外层) 的程序 在错误发生时会终止程序的执行!
可以定义忽略任何错误的处理的空语句:declare continue handler for sqlwarning begin end;
游标:只读、仅单步向前、不敏感的
declare cursor_name cursor for no_into_select_clause;
open cursor_name;
fetch cursor_name into var1 [,var2] [,...] ; 可能会产生 not found 异常错误
close cursor_name 如果没有显式调用关闭游标的语句,游标会在作用域超出定义该游标的scope是自动销毁
mysql的cursor读取没有特殊的内部变量。利用handler 和 "not found"条件来处理
控制结构
if if_condition then
statement_list;
[elseif if_condition then statement_list;]
[elsestatement_list;]
end if;
case
when case_condition then statement_list;
[when case_condition then statement_list;]
[else statement_list;]
end case;
[repeat_label:] repeat --其他语言的do循环结构。
statement_list;
util repeat_condition
end repeat [repeat_label];
[while_label:] while while_condition do --其他语言的while循环结构
statement_list;
end while [while_label];
[loop_label:] loop --一般循环结构,注意没有控制条件,必须在statement_list中含有控制条件、leave、iterate语句;
then statement_list;
end loop [loop_label];
leave label_name; 类似其他语言的exit [when..],跳出结构。用来退出begin..end、loop、repeat、while,前提是必须处于相应的结构里,且结构定义了标签
iterate label_name;
类似于其他语言的continue,继续下次循环。用来退出loop、repeat、while,前提是必须处于相应的结构里,且结构定义了标签
函数的return exp; 语句 --仅仅用在存储函数中的语句!
存储过程
存储函数
视图
触发器
计划任务
在mysql.exe客户端里写存储程序的";"分割符问题
这个问题来自mysql.exe客户端本身以";"作为语句的分隔符(结束符)本身。而大部分的管理、开发mysql的应用程序均类似于mysql.exe,所以必须通过delimiter这个mysql服务器可识别的命令来临时修改服务器认可的有效语句分隔符
存储程序组成结构
[label name]
begin
[declare 普通变量|declare异常别名];
[declare 异常别名|declare普通变量];
[declare 游标;]
[declare 异常处理;]
[begin end 复合语句;]
[循环语句;]
[条件语句;]
......
end [{lable name}]
//
declare本地变量
declare va11 [,var2] [,...] date_type [default value --可以是表达式、常量]
本地变量声明时要注意先后顺序:普通变量、游标、操作符
本地变量可以一次声明同类型的多个变量 --类似于c语言,不同于postgresql、oracle;不可以指定[not] null 约束;不可以声明为constant 变量
本地变量可以有初始化的default值,否则为null
本地变量可以向内层begin end 符合语句传递,除非她被内层同名变量overide
本地变量名字不要和表列同名,在过程内,本地变量总是优先被采用
set变量赋值
set var1 = value1 [,var2 = value2] [,....]
mysql的set语句可以对本地变量、系统变量、用户自定义变量赋值,而不仅仅是本地变量!
select变量赋值 必须返回0行或 1 行 记录
select col1 [,col2] [,exp1] [,exp2] [,....] into val1 [,val2] [,val3] [,val4] [,....] from table_express
如果select没有返回数据,mysql有no data 的警告:warning with error code 1329 产生,变量保持原值
如果select返回多行数据,mysql或发生错误!可以通过limit 1 来限制。
mysql的异常处理
declare conditon_name condition for {sqlstate [value] 'sqlvalue'|mysql_error_code} --定义异常:目的是找一个含义更明显或更适合的名称;可理解为别名。
declare {continue|exit|undo} handler for {sqlstate [value] 'sqlvalue'|mysql_error_code|conditon_name
|sqlwarning|notfound|sqlexception} [,....] --定义异常处理mysql的异常处理
类似于其他过程化sql语言的错误处理,只是结构和使用方法不同(postgresql、oracle都是固定的块结构的一可选部分exception;
sqlserver是@@error 或try catch final)
这个handler可以和多个条件关联,类似于postgresql、oracle的when ... when ... when others...
handler的sqlwarning 是 "01xxx"类的错误
handler的not found 是 "02xxxx"类的错误
handler的sqlexception 是 除了'00000'、'01xxxx'、"02xxxx"类的错误
注意sqlstate value ='00000' 或 mysql_error_code=0 表示操作成功,通常不应该去使用的!
handler的continue表示当相关联的块的错误条件发生时、继续从出错的语句下一个语句执行;exit表示发生错误,立即终止程序的执行;undo目前尚未实现!
没有handler的块 或 定义了exit处理(不管是内层还是外层) 的程序 在错误发生时会终止程序的执行!
可以定义忽略任何错误的处理的空语句:declare continue handler for sqlwarning begin end;
游标:只读、仅单步向前、不敏感的
declare cursor_name cursor for no_into_select_clause;
open cursor_name;
fetch cursor_name into var1 [,var2] [,...] ; 可能会产生 not found 异常错误
close cursor_name 如果没有显式调用关闭游标的语句,游标会在作用域超出定义该游标的scope是自动销毁
mysql的cursor读取没有特殊的内部变量。利用handler 和 "not found"条件来处理
控制结构
if if_condition then
statement_list;
[elseif if_condition then statement_list;]
[elsestatement_list;]
end if;
case
when case_condition then statement_list;
[when case_condition then statement_list;]
[else statement_list;]
end case;
[repeat_label:] repeat --其他语言的do循环结构。
statement_list;
util repeat_condition
end repeat [repeat_label];
[while_label:] while while_condition do --其他语言的while循环结构
statement_list;
end while [while_label];
[loop_label:] loop --一般循环结构,注意没有控制条件,必须在statement_list中含有控制条件、leave、iterate语句;
then statement_list;
end loop [loop_label];
leave label_name; 类似其他语言的exit [when..],跳出结构。用来退出begin..end、loop、repeat、while,前提是必须处于相应的结构里,且结构定义了标签
iterate label_name;
类似于其他语言的continue,继续下次循环。用来退出loop、repeat、while,前提是必须处于相应的结构里,且结构定义了标签
函数的return exp; 语句 --仅仅用在存储函数中的语句!
相关文章推荐
- 游标、例外、存储过程、存储函数、java调用存储过程、触发器(Oracle之二)
- Mysql 存储过程,触发器,视图 学习记录
- Mysql 存储过程,触发器,视图 学习记录
- mysql 创建存储过程 java程序调用该存储过程
- mysql 查询表,视图,触发器,函数,存储过程
- mysql查看所有存储过程,函数,视图,触发器,表
- Mysql入门第四课 视图和存储程序
- MySQL之视图、存储过程、触发器、函数、事务、动态执行SQL
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- mySQL查看存储过程、函数、视图、触发器
- 发个解密存储过程,触发器,视图的存储过程
- mysql 触发器 存储过程 函数 视图
- mysql查看所有存储过程,函数,视图,触发器,表
- mysql查看所有存储过程,函数,视图,触发器,表,分页
- 14.数据库oracle必学,其他最好了解一种以上(mysql,sql server,access==) oracle:视图,索引,存储过程,触发器,游标,包,常用函数
- 查看MySQL所有存储过程、函数、视图、触发器及表
- mysql 视图,触发器,存储过程
- MySql基础教程二(视图,存储过程,游标,触发器,事务,权限,数据类型)
- Mysql 存储过程、函数、触发器和视图的权限检查
- mysql自带计划任务创建语法