Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 42|回复: 0

11.12

[复制链接]

13

主题

13

帖子

63

积分

注册会员

Rank: 2

积分
63
发表于 2019-11-12 22:17:22 | 显示全部楼层 |阅读模式
数据库存储过程 (测试需要做的)

procedure 程序/过程

什么是存储过程?

存储过程是一组完成特定功能的sql语句的集合,通过编译后存储在数据库中,通过存储过程名称进行执行调用。

存储过程中大多数都是sql语句,还有控制结构语句(if,where,cass)

使用存储过程的优点

1.存储过程创建后可以多次调用,使用简单,方便

2.存储过程中可以接收参数和输出返回值

3.使用存储过程可以提高运算速度。本身就是已经编译后的sql语句

4.使用存储提高了sql语句功能。因为存储含有控制语句。

如何创建一个存储过程

基本格式

delimiter//

create procedure yy()

begin


select * from emp;

end

//

创建完以后可以在函数里查看




delimiter // #分隔符

create procedure 存储过程名称(参数可以有可以没有)


begin #开始


存储过程体 #sql 语句集合,控制语句

end #结束

//


如何调用一个已经存在的存储过程

call +存储过程的名称()

比如上面已经创建的yy,调用他:call yy()


删除一个已经存在的存储过程

drop procedure +存储过程名称

比如删除已经创建的yy存储: drop procedure yy

注意:删除已经创建的存储,存储名称不能加括号


加强存储过程的功能:判断存储过程是否存在,存在就删除,不存在就不断进行创建:

drop procedure if exists +存储名称; (写在begin下面)


delimiter//

drop procedure if exists +存储名称;

create procedure yy()

begin

select * from emp;

end

//


注意点:

drop table if exists 写在begin下面






创建存储过程的时候,参数的定义

create procedure pro(in|out|inout)

in:in类型的参数,定义的时候需要说明



in类型的参数(用于输入值)

pro_4(in n int)

in:in类型

n:自定义参数

int:参数的数据类型


delimiter//

drop procedure if exists xue;

create procedure xue(in n int)

begin

select * from emp where xue_id=n;

end



out 类型的参数 (用于输出值)

pro_yy(out n int)

out: out类型

n:参数的数据类型

create procedure yy(out n int)

begin

select emp_income into n from emp

where emp_id=1

end

调用

call pro_yy(@n

查询:select@n

注意点:调用没有任何输出,只能把调用的结构赋值给传输时的参数

调用显示存储

列:delimiter//

drop procedure if exists pro_5;

create procedure pro_5(

out a int,

out b int,

out c int)

begin

select emp_age into a from emp where emp_id=1;

select emp_income into b from emp where emp_id=1;

select emp_id into c from emp where emp_id=1;

end

//

字符类型可以修改

调用:call pro_5(@a,@b,@c)

查询:select @b,@b,@c




存储过程中的控制语句

if (条件) #判断开始

begin

if(条件) then #然后

sql语句

else

不满足条件执行的sql语句

end

delimiter//

drop procedure if exists pro_5;

create procedure pro_5(in n int)

begin

if (n<6)

then

select * from emp where emp_id=n;

select * from emp;

else

select * from dept;

end if;

end

//


调用:call pro_5(4)





、只能两种情况的判断,1满足,2不满足,当有多个条件进行判断

if 判断的基本格式

begin

in(条件1)

then

满足条件1执行sql语句

列:else if(条件2)

then

else if(条件3)

delimiter//

drop procedure if exists pro_5;

create procedure pro_5(in n int)

begin

if (n<6)

then

select * from emp where emp_id=n;

elseif (n=6)

then

select * from emp;

else

select * from dept;

end if;

end

//


调用:call pro_5(2)


while 循环

控制循环的操作

基本格式

begin

while +(条件)

满足条件执行的sql语句

改变条件的变量

while; #while

存储过程中可以使用控制语句while循环造测试数据


delimiter//

drop procedure if exists pro_5;

create procedure pro_5(in n int)

begin

declare count int default (select count(*) from yy1);

while(count<n)DO

insert into yy1(age) values(100);

set count=count+1;

end while;

end

//


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|多测师软件培训|Archiver|手机版|小黑屋|duoceshi Inc. ( 16058051 )

GMT+8, 2019-12-13 16:11 , Processed in 0.090621 second(s), 21 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表