存储过程和函数(2)

1、变量的使用

(1)定义变量

declare  var_name date_type;

说明:var_name 为局部变量的名称,default value 字句默认的给变量提供一个默认值,值除了可以被声明为一个常数之外,还可以指定为一个表达式。

例如:declare  myparaml  int  default 100;

(2)为变量赋值

<1>set  var_name = exrp;

说明:不同的变量类型可以被混合起来使用;

例如:declare var1,var2,var3 int;

set var1 = 1;

set var2 = 2;

set var3 = 3;

<2>还可以通过select .......into 为一个或者是多个变量赋值;

select  col_name[,......] into var_name [,........] +查询表达式和表名称;

declare fruitname char(50)
declare fruitprice decimal(8,2)
select f_name,f_price into fruitname,fruitprice from fruits where f_id="1001";

2、光标的使用

(1)查询语句可以返回多条记录,如果数据量非常大,需要在存储过程和存储函数中使用光标来逐条读取查询结果集中的记录。应用程序可以根据需要滚动或浏览其中的数据。

(2)光标必须在声明处理程序之前被声明,并且变量和条件还必须在声明光标或处理程序之前被声明。

(3)声明光标

<1>declare  cursor_name  cursor for select_statement;

说明:cursor_name 为光标的名称,select_statement参数表示select 语句的内容,返回一个用于创建光标的结果集;

例如:
decalre cursor_fruit cursor for select f_name,f_price from fruits;
说明:上述代码中,光标的名称为cursor_fruit,select语句部分从fruits表中查询出f_name和f_price字段的值;

(4)打开光标

open sursor_name{光标名称},打开先前声明的cursor_name的光标;

(5)使用光标

fetch  cursor_name  into var_name【,var_name......】{参数名称};

说明:cursor_name参数表示光标的名称,var_name参数表示将光标中的select语句查询出来的信息存入到该参数中,var_name必须在声明光标之前就定义好。

例如:fetch cursor_name into fruit_name,fruit_price;,将所定义的光标的查询结果存放到新声明的变量中;

(6)光标关闭

close  cursor_name{关闭光标};

3、流程控制的使用

流程控制语句用来根据条件控制语句的执行,在M有SQL语句中常用到的流程控制语句有,case语句,loop语句,leave语句,ierate语句,REPEAT语句和WHILE语句;每个流程可能包含一个单独语句,或者是使用BETWEEN......AND语句构造的复合语句,构造可以被嵌套。

(1)if语句

在使用if语句的时候,if语句可以包含多个判断条件,根据判断结果为true或false执行相应的语句,语法格式如下:

if  expr_condition then statement_list 

[elseif  expr_condition then statement_list] ......

[else statement_list]

end if;

说明:if实现了一个基本的构造条件,如果表达式的值为真,相应的SQL语句列表被执行,如果没有表达式匹配,则else字句里面的语句列表被执行;statement_list可以包含一个或者是多个语句;

例如:
if var  is null
then select 'var is null';
else select 'var is not null';
end if;
说明:该例用于判断var是否为空,如果var值为空,输出字符串'var is null',如果字符创不为空,输出字符串'var is not null';if语句都是需要end if来结束的;

(2)case语句

case是另一个进行条件判断的语句,该语句有两种语句格式,第一种格式如下:

case  case_expr

when when_value then statement_list

[when when_value then statement_list]...

[else statement_list]

end if;

说明:case_expr参数表示条件判断的表达式,决定使用哪一个when字句会被执行,when_value参数表示表达式可能的值,如果某个when_value表达式与case_expr表达式结果相同,则执行相应then关键字后面的statement_list中的语句,statement_list参数表示不同when_value值的执行语句;

例如:
case var
when 1 then select 'var is 1';
when 2 then select 'var is 2';
else select 'var is not 1 or 2';
end case;
第二种格式:

case  when expr_condition then statement_list

[when expr_condition  statement_list]......

[else  statement_list]

end case;

说明:这里面的case语句不能够有else语句为null,并且使用end case替代end结束;

例如:
case
when var id null then select 'var is null';
when var<0 then select 'var is less then o';
when var>0 then select 'var is more 0';
else select 'var is 0';
end case;
(3)loop语句

loop语句用来重复执行某些语句,与if和case相比,loop只是创建一个循环操作的过程,并不是进行条件判断。loop内的语句一致重复执行到循环被退出,跳出循环过程,使用leave字句,基本格式如下:

[loop_lable:]loop

statement_list

end loop [loop_lable];

说明:loop_lable表示loop语句的标注名称,改参数一般情况下可以省略,statement_list参数表示需要循环执行的语句。


例如:
declare id int default ;
add_loop:LOOP;
set id = id+1;
if id>=10 then leave add_loop;
end if;
end loop add_loop;
该例循环执行id+1的操作,当id的值小于10的时候,循环重复执行,当id的值大于或者是等于10时,使用leave语句退出循环。loop循环都是以end loop+标注名称结束;

猜你喜欢

转载自blog.csdn.net/m0_37248802/article/details/79090208