MYSQL存储过程中的参数主要有局部参数和会话参数两种,又称局部变量和会话变量。

局部标量只在定义该局部变量的begin...end范围内有效,会话变量在整个存储过程范围内均有效。

1.局部变量

局部变量以关键字declare声明,后跟变量名和变量类型,例:

declare a int

在声明局部变量时,也可用关键字default 为变量指定默认值,未设置时默认值为NULL。例:

declare a int default 10

 

例局部变量与存储过程:

delimiter//

create procedure pl()

begin

declare x char(10) default 'outer';

begin

declare x char(10) default 'inner';

seclect x;

end;

select x;

end

//

调用存储过程call pl()//

第一次x值为inner,第二次x值为outer。

 

2.全局变量

MYsql中会话变量不必声明即可使用,并在整个存储过程中都有效,会话变量名以字符‘@’作为

起始字符。例:

delimiter//

create procedure p2()

begin

set @t=1;

begin

set @t=2;

select @t;

end;

select @t;

end 

//

调用该存储过程call p2()//

两次@t的值均为2.

 

MYSQL中使用set关键字为变量赋值:

set var_name=expr[,var_name=expr]...

另一种赋值语句为:

select col_name[,...] into var_name[,...] from table_name where condition

表示将查询结果赋值给变量var_name.

 

光标的运用

通过MYSQL查询数据库,其结果可能为多条记录。在存储过程和函数中使用光标可以实现逐条读取

结果集中的记录。光标使用包括声明光标(declare cursor)、打开光标(open cursor)、使用

光标(fetch cursor)和关闭光标(close cursor)。光标声明必须在处理程序之前,且声明在变量和

条件之后。

 

1.声明光标

declare cursor_name cursor for select_statement

其中 cursor_name是光标的名称。select_statement是一个select语句,返回一行或多行数据。

其中这个语句也可以在存储过程中定义多个光标,但是必须保证每个光标名称的唯一性。例:

declare info_of_student cursor for select 

sid,name,age,sex,age from studentinfo

where sid= 1;

这里的select 子句不能包含into子句,并且光标只能在存储过程或存储函数中使用,上述代码

不能单独执行。

打开光标open cursor_name ,

在一个程序中,一个光标可以被打开多次。由于可能在用户打

开光标后,其他用户或程序正在更新数据表,可能导致用户在每次打开光标后,显示的结果都

不同。

 

使用光标

光标在打开后可使用:fetch cursor_name into var_name[,var_name]...

其中cursor_name 代表已经打开的光标的名称;var_name参数表示将光标中的select语句

查询出来的信息存入该参数中。var_name 是存放数据的变量名,必须在声明光标前定义好。

fetch...into 语句与select...into语句具有相同的意义。

将已打开的光标info_of_student中select 语句查询出来的信息存入tmp_name和tmp_tel中。

其中tmp_name和tmp_tel必须在使用前定义。其代码如下:

fetch info_of_student into tmp_name,tmp_tel;

 

关闭光标

光标使用完毕后要及时关闭。对于已关闭的光标,不能再使用fetch来使用。

close cursor_name

 posted on 2018-08-28 15:27  庭明  阅读(161)  评论(0编辑  收藏  举报