invoker:在执行存储过程时判断inovker即调用该存储过程的用户是否有相应权限,若没有则报错。
LANGUAGE SQL :说明routine_body部分是由SQL语句组成的,当前系统支持的语言为SQL,SQL是LANGUAGE特性的唯一值
[NOT] DETERMINISTIC :指明存储过程执行的结果是否正确。DETERMINISTIC 表示结果是确定的。每次执行存储过程时,相同的输入会得到
相同的输出。
[NOT] DETERMINISTIC 表示结果是不确定的,相同的输入可能得到不同的输出。如果没有指定任意一个值,默认为[NOT] DETERMINISTIC
CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA:指明子程序使用SQL语句的限制。
CONTAINS SQL表明子程序包含SQL语句,但是不包含读写数据的语句;
NO SQL表明子程序不包含SQL语句;
READS SQL DATA:说明子程序包含读数据的语句;
MODIFIES SQL DATA表明子程序包含写数据的语句。
默认情况下,系统会指定为CONTAINS SQL
SQL SECURITY { DEFINER | INVOKER } :指明谁有权限来执行。DEFINER 表示只有定义者才能执行
INVOKER 表示拥有权限的调用者可以执行。默认情况下,系统指定为DEFINER
COMMENT 'string' :注释信息,可以用来描述存储过程或函数
create procedure rect_area(width int,height int)
select width * height as area;
create function circle_area
retruns float
return PI()*radius*radius;
存储过程可以嵌套
18.5.2 定义参数
create functtion tax(cost decimal (1o,2),tax_rate decimal(10,2))
returns decimal (10,4)
return cost* tax rate;
对于procedures,参数的名字定义:
IN表明输入参数;out表明输出参数。INOUT表明是两个方向的。
create procedureparam_test(In p_in int,out p_out int,inout p_inout int)
begin
select p_in,p_out,p_inout;
set p_in=100,p_out=200,p_inout=300;
set @v_in=0,@v_out=0,@v_inout=0;
call param_test(@v_in,@v_out,@v_inout);
18.5.3 这declare语句
1局部变量
2.条件如警告或异常
3.处理条件
4.获取结果及的cusors
declare定义变量,通过使用set,select into来赋值
18.5.5 条件和处理
create table unique_names( name char(20) not null primary key);
begin
declare exit handler for sqlstate '2300'
18.5.6 Cursors
一个Cusor能够使你访问结果集。Cursor的实现由一下的特征:它提供可读的cursors;他们不能用来修改表。cursors近几年通过一个结果一行一行的。他们无法滚动
declare cursor_name cursor for select_statement
open cursor_name
fetch cursor_name into var_name,[, var_name]....
declare continue handler for sqlstate 'o2000' statement
close cursor_name
18.5.7 获取多个结果集
用于存储过程
18.5.8 流控制
1.IF和CASE执行条件测试
2.LOOP,REPEAT和WHILE创建loops。
流控制
LEAVE和ITERATE:LEAVE可以用于begin/end,但是ITERATE不能用于begin/end.
18.6 修改存储过程
alter procedure proc_name [characteristercs]
alter fuction func_name [characteristics]
18.7 删除存储过程
drop
18,。8 invoking存储过程
使用call调用
18.9 获取存储过程的元数据
select* from information_schema.routns
where routin_name='worl
and routni='world'
支持show来展示存储过程show procedurer status和show function status
18.10 存储过程需要权限
create routine privilege 有execute privilege alter routine privilege