存储过程/函数
存储过程/函数 是保存在mysql服务器中的一些sql语句的集合(当然其中也会包含一些变量声明、逻辑语句等)。
注意它是在mysql服务器上的,这样一来,客户端与mysql服务端的交流中,无需具体sql的传递,仅仅一个存储过程名或函数名即可,sql语句是在mysql服务器内部读取的,会非常迅速。
mysql的存储过程/函数与oracle的相差无几。
初学者了解大概即可,注意下存储过程和函数的写法以及调用方法,光标这种东西大数据时尽量少用。
> create procedure sp_name ([in|out|inout] paramter type, ...)
> begin
> declare aaa varchar(20) default 'tiemfad' //定义局部变量
> set @bbb=122 //定义全局变量,
> set aaa='3qrj;s' //为变量赋值
> select name into aaa from tb_name where id=1
> end;
>create function sp_name (paramter type) return type
>begin
> return (select name from tb_name where id = 1 )
>end;
在mysql中存在一个光标对象,它与oracle中的游标相类似,初学者可以将其视为一个list集合,在使用时逐条遍历,光标需要经历声明(赋值)、打开、使用、关闭,四个步骤。
>DECLARE cursor_name CURSOR FOR (select name from tb_name where sid = 1);
>OPEN cursor_name
>FETCH cursor_name INTO var_name ....
>CLOSE cursor_name
存储过程的调用
> call sp_name(paramter);
函数的调用
> select function_name(paramter);
初学者应注意,在面对大数据量的操作时,尽可能避免使用光标,它是十分影响速度的。
还存在一些流程控制语句,如
>IF x=1 THEN
>...
>END IF
>CASE val
>WHEN val THEN ...
>...
>ELSE ...
>END CASE
>WHILE i<=100 DO
>...
>END WHILE
>BEGIN
>...
>loop_label: LOOP //注意这里有个自定义的loop_label,其实就是一个位置标识。
>...
>if i>100 then
>leave loop_label
>end if
>end loop;
>REPEAT
>...
>UNTIL condition
>END REPEAT