mysql写了过程变函数_MYSQL 存储过程与函数

存储过程 :一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

(1)创建一个简单存储过程语法:

首先将数据库以分号结束的语法修改:delimiter $$ #将语句的结束符号从分号;临时改为两个$$(可以是自定义)

然后开始创建:

CREATE PROCEDURE delete_mat(IN p_in INTEGER)

BEGIN

DELETE FROM MATCHES

WHERE playerno = p_playerno;

END $$

最后:delimiter ;  #将语句的结束符号恢复为分号

(2)调用存储存储过程:call 存储过程名称(参数);

(3)存储过程体:过程体格式:以begin开始,以end结束(可嵌套);(4)为语句块贴标签:

label1: BEGIN

label2: BEGIN

label3: BEGIN

statements;

END label3 ;

END label2;

END label1

存储过程的参数:IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)

OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)

INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

注意:

①如果过程没有参数,也必须在过程名后面写上小括号

例:CREATE PROCEDURE sp_name ([proc_parameter[,...]]) ……

②确保参数的名字不等于列的名字,否则在过程体中,参数名被当做列名来处理

输入值使用in参数;

返回值使用out参数;

inout参数就尽量的少用。

删除存储过程和函数:Drop procedure 过程名称。函数的话,将procedure换成function;

存储过程和函数的区别:存储过程没有返回值,函数必须有返回值。

查看存储过程或函数(1)查看存储过程或者函数的状态:show {procedure|function} status {like 'pattern'};

(2) 查看存储过程或者函数的定义:show create {procedure | function} 名称;

(3)查看information_schema.Routines了解函数和存储过程信息:select * from information_schema.routines where routine_name = '名称';

函数创建create function 名称(参数名称 类型,...) return 数据类型 begin [定义变量] 。。。return 结果 end $$

变量的使用

(1)定义变量:declare 变量名 type [default value];eg:declare last_month_start Date;

(2)变量赋值:变量可以直接赋值木业可以通过查询赋值(结果必须返回的是一行)。直接赋值使用set,可以赋值常量或者表达式。

定义条件和处理

(1)定义条件:declare 条件名称 condition for condition_value;

condition_value:SQLstate[value] sqlstate_vale|mysql_error_code

(2)条件处理:declarehandler_typehandler 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

sqlwarning是对所有以01开头的sqlstate代码速记;

not found 是对所有以02开头的sqlstate大妈速记;

sqlexception是对没有被sqlwarning或not found捕获的sqlstate代码速记。光标的使用(1)声明光标:declare cursor_name Cursor for select_statement;

(2)Open光标:Open cursor_name;

(3)fetch光标:fetch cursor_name into var_name[,var_name]...;

(4)close光标:closer cursor_name;

eg:

mysql> delimiter $$

mysql> create procedure t_start()

-> begin

-> declare i_staff_id int;

-> declare d_amount decimal(5,2);

-> declare cur_payment cursor for select id,amount from t;

-> declare exit handler for not found close cur_payment;

-> set @x1=0;set @x2=0;

-> open cur_payment;

-> repeat

-> fetch cur_payment into i_staff_id,d_amount;

-> if i_staff_id = 2 then set @x1=@x1+d_amount;

-> else set @x2=@x2+d_amount;

-> end if;

-> until 0 end repeat;

-> close cur_payment;

-> end;

-> $$    #注:变量、条件、处理程序、光标都是通过declare定义,有先后顺序。变量和条件必须在最前面声明,然后才能是光标的声明,最后才是处理程序的声明。

流程控制

主要使用的流程控制语句:if、case、loop、leave、iterate、repeat和while语句进行流程控制。

(1)if语句:if search_condition then statement_list[elseif search_condition then statement_list]...[else statement_list] end if;

(2)case语句:case case_value when when_value then statement_list [when when_value then statement_list]...[else statement_list] end case;

或case when when_value then statement_list [when when_value then statement_list]...[else statement_list] end case;

(3)loop语句:[begin_label:]loop statement_list end loop [end_label];

(4)leave语句:用来从标注的流程构造中退出,通常和begin...end或者循环一起使用。eg: ... begin_label:loop ...;leavebegin_label;....end loop end_label;...

(5)iterate语句:必须用在循环中,作用是跳过当前循环的剩下语句,直接进入下一轮循环(与基础循环中的continue类似)。

(6)repeat语句:当满足条件的时候退出循环,[begin_label:]repeatstatement_list untilsearch_condition end repeat [end_label];

(7)while语句:[begin_label:]whilesearch_condition do statement_list end while [end_label];

事件调度器

事件调度器语法:create event 事件名称 on schedule 何时以及频次 do 操作。

eg:

mysql> create event test_event

-> on schedule every 10 second

-> do

-> insert into txk.t(id,context,amount) values(12,'test',2);

Query OK, 0 rows affected (0.08 sec)

查看调度器状态:show events;

查看事件调度器状态: show variables like '%scheduler%';(默认是关闭)

打开事件调度器: set global event_scheduler = 1;

查看后台进程:show processlist;

创建一个每隔1分钟清空一次表:

mysql> create event trunc_test

-> on schedule every 1 minute

-> do truncate table t;

Query OK, 0 rows affected (0.00 sec)

禁用或者删除时间调度器:alter event 事件调度器名称 disable;drop event 时间调度器名称;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值