mysql-存储过程
                        
                            时间:2021-07-01 10:21:17
                            帮助过:10人阅读
							                        
                     
                    
                    
                    、数据存储:把多个sql语句封装成一个方法
delimiter //    修改结束符
create procedure proc()
begin  
select * from student;
end
//
call  调用方法
变量的定义:
declare 变量名  type  
default 默认值;
修改变量的值
set 变量名
= 值 或 
Drop  procedure proc2;
delimiter //
Create procedure proc2()
Begin 
Declare var1 
varchar(
10) 
default null;
Declare var2 
int  default 0;
select name ,age 
into  var1, var2 
from student 
where id 
=1; 
         Result consisted of more than one row(这种错误出现的原因是没指定id 的值,结果多余变量的个数)
Select var1;
Select var2;
End  //
Delimiter ;
delimiter //
drop procedure if exists proc2;
Create procedure proc2()
Begin 
Declare var1 
varchar(
10) 
default null;
declare var2   
int  default 0;
select name ,age 
into  var1, var2 
from student 
where id 
=1; 
Select var1 
as  姓名, var2 
as 年龄;
End  //
Delimiter ;
1、存储过程:
Delimiter //    修改结束符
Drop  procedure if exists pro1;     判断,如果存在pro1 则删除
Create  procedure pro1()     创建 
procedure 存储过程
Begin 
End//
Delimiter ;
Call pro1;
2、游标:
语法:
(
    声明游标
    declare cursor_name 
cursor for select_statement;
    打开游标(在使用游标之前)
    open cursor_name;
    获取游标中的数据 into 变量
    fetch cursor_name 
into var_name1,var_name2,...;
    关闭游标(在使用游标之后)
    close cursor_name;
)
 
 
 delimiter //
 drop procedure if exists pro;
 create procedure pro()
     begin
     declare var varchar(
20) 
default null;
     declare cursor_name 
cursor for select name 
from student 
where id
=1;
     open cursor_name;
     fetch cursor_name 
into var;
     close cursor_name;
     select var as 姓名;
     end //
 delimiter ;
 call pro;
procedure  程序、
declare  声明、
delimiter //
Drop procedure if exists pro
//
create procedure pro()
begin 
declare  var1  
char(
10) 
default null;
declare  var2  
int  default 0;
declare  cursor1 
cursor for select name ,age  
from student 
where id
=1;    
open cursor1;
fetch cursor1 
into var1, var2;
close cursor1;
select var1 
as ‘姓名’, var2 
as ‘年龄’;
end  //
delimiter ;
call pro;
3、存储过程中的if判断语句
语法:
(
    if ..... 
then ......;
    else if ...... 
then ......;
    else .......;
    end if;
)
delimiter //
drop procedure if exists pro
//
Create procedure pro()
begin 
declare var int;
if var is null then select ‘var is null‘ as 结果;
Else select var as 结果;
end if;
Set var=10;
If var is null then select  ‘var is null‘ as 结果;
Else select var  as 结果;
End if;
End//
Delimiter ;
Call pro;
4、存储过程中的case判断语句
语法:
(
    case  要判断的变量
    when .... 
then .... ;
    when .... 
then .... ;
    ....;
    else ....;
    end case;
)
 delimiter //
 drop procedure if exists pro;
 create procedure pro()
     begin
     declare var int default 0;
     set var=5;
     case var
     when 1 then select * from student 
where id
=var;
     when 2 then select * from student 
where id
=var;
     when 3 then select * from student 
where id
=var;
     else select ‘no such case‘ as 结果;
     end case;
     end//
 delimiter ;
 call pro;
 
 
 
 5、存储过程中的loop循环语句
 
 语法:
 (
     loop sql_statement;
         if ... 
then leave
/iterate;
         end if;
     end loop;
 )
 
 
 delimiter //
 drop procedure if exists pro
//
 create procedure pro()
     begin
     declare var int default 0;
     myloop:loop insert student 
values(
null,
‘Rose‘,
var,
‘女‘);
          if var >=100 then leave myloop;
          end if;
          set var=var+1;
     end loop;
     end//
 delimiter ;
 call pro;
 
 注意:在sql语句中没有 “==”,直接用“
=”来作为判断等于的符号。
 
 
 6、存储过程中的repeat循环语句
 
 语法:
 (
     repeat_label:repeat sql_statement;
     until ... end repeat repeat_label;
     
 )
 
 delimiter //
 select * from student
//
 drop procedure if exists pro;
 create procedure pro()
 begin
 declare var int default 1;
 my_repeat:repeat insert into student 
values(
null,
‘Rose‘,
var,
‘女‘);
 set var=var+1;
 until var>100 end repeat my_repeat;
 end//
 delimiter ;
 call pro;
 select * from student;
 
 
 
 7、存储过程中的while循环
 
 语法:
 (
     while_label:while ...(循环条件)
     do sql_statement;
     end while while_label;
 )
 
 
 delimiter //
 select * from student
//
 drop procedure if exists pro
//
 create procedure pro()
 begin
 declare var int default 719;
 my_while:while var<=818
 do delete from student 
where id 
= var;
 set var=var+1;
 end while my_while;
 end//
 delimiter ;
 call pro;
 
 
 
 delimiter //
 drop procedure if exists pro
//
 create procedure pro()
 begin
 declare var int default 1;
 my_while:while var<=100
 do insert into student 
values(
null,
‘Rose‘,
var,
‘女‘);
 set var=var+1;
 end while my_while;
 end//
 delimiter ;
 call pro;
 
 
 8、查看存储过程
 
 语法:
 (
     show {procedure/function} status 
[like ‘pattern‘];
     show create procedure pro_name;
 )
 
 show procedure status;
 show create procedure pro;
 
 
 
 9、修改存储过程
 
 
 10、删除存储过程
  语法:
  (
      drop {
procedure/function} 
if exists pro_name;
  )
 
  drop procedure if exists pro;
 
 
 
  11、存储过程出错处理
  
  定义错误情况
  
  declare condition_name condition 
for condition_type;
 
mysql-存储过程
标签:sel   label   默认值   delete   int   stat   blog   循环   ...