MySQL--存储和游标

本文详细介绍了如何在数据库中使用C语言函数风格的存储过程,涵盖了变量声明、参数类型(IN/OUT/INOUT)、创建过程、SQL操作、分支与循环、游标使用以及存储过程的查询、修改、删除。通过实例演示了如何定义存储过程、调用过程并处理用户变量和游标。
摘要由CSDN通过智能技术生成

存储(类比C语言的函数)

变量

1 IN:输出变量
2 OUT:输入变量
3 INOUT:输入输出变量

存储的创建

通用:

create procedure <proc_name> ([IN/OUT args])
begin
	-- SQL;
end;

案例:

create procedure proc_text1 (IN a int,IN b int,OUT c int)
begin
//定义局部变量:declare x int default 0;定义int型变量x,默认值为0;
	SET c = a+b;
end;

//调用:
set @m = 0;//定义用户变量
call proc_text1(2,3,@m);

定义的用户变量以@开头,set直接定义,存储在数据库的字典(dual)中可以查询

select @name from dual;

查询表中数据赋值给变量:INTO 关键词

set @a;
create procedure proc_text2(OUT c int)
begin
	select count(stu_num) INTO c from students;
end;
call proc_text2(@a);

分支循环语句

if then else语句

create procedure proc_text3(IN c int)
begin
	if c = 1 then
		-- SQL1
	else//else可以不要
		-- SQL2
	end if;
end;

case语句

create procedure proc_text4(IN c int)
begin
	case c
	when 1 then
		-- SQL1
	when 2 then
		-- SQL2
	else//可以不写
		-- SQL
	end case;
end;

while 语句

create procedure proc_text5(IN c int)
begin
	declare i int;
	set i = 0;
	while i<c do
		-- SQL
		set i=i+1;
	end while;
end;

repeat语句

create procedure proc_text6(IN c int)
begin
	declare i int;
	set i =0;
	repeat
		-- SQL
		set i = i+1;
	until i>c end repeat;
end;

loop 语句

create procedure proc_text7(IN c int)
begin
	declare i int;
	set i =0;
	myloop:loop
		-- SQL
		set i = i+1;
	if i>c then
		leave loop;
	end if;
	end loop;
end;

存储过程(函数)的查改删

查询

//根据数据库名查询存储过程
show procedure status where db = '数据库名';
//查询存储过程的细节
show create procedure 数据库名.函数名;

修改

alter procedure proc_text1 特征1 特征2...

特征参数:
contains sql 表示子程序包含sql语句,但不包含读或者写数据的语句
no sql表示子程序中不包含sql语句
reads sql data 表示子程序中包含读数据的语句
modifies sql data 表示子程序中包含写数据的语句
sql security {definer | invoker}指明谁有权限来执行
definer 表示只有定义者自己才能执行
invoker 表示调用者可以执行
comment ‘string’表示注释信息

删除

drop procedure proc_text1;

游标(相当于数组下标)

可以逐条返回查询的结果中的记录

1、声明与关联

利用declare声明一个变量 类型是cursor
再用关键词for+一个查询语句关联一个查询结果

declare cursor_name cursor for select ...
例:
declare mycursor cursor for select book_name,book_auther,book_price from books;

2、打开和使用

直接open + 游标名;打开游标
之后用fetch + 游标名 INTO 字段1 …取出游标的数据,之后游标会自动增1,所以可以用一个循环读出游标数据

declare bname varchar(40);
declare bauthor varchar(40);
declare bprice decimal(10,2);
declare i int default 0;
open mycursor;
while i < num;//结果集的数量
fetch mycursor into bname,bauthor,bprice;
set i = i+1;
-- set str = concat('~',bname,bauthor,bprice);本句与下一句功能一样
select concat_ws('~',bname,bauthor,bprice) into str;
set result = concat_ws(',',result,str);
end while;
close mycursor;//关闭游标

使用后注意关闭游标

用close

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值