存储过程

  definer:在执行存储过程前验证definer对应的用户如:root@192.168.2.%是否存在,以及是否具有执行存储过程的权限,若没有则报错 

        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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值