732618078

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

存储过程:

一组可编程的函数,是为了完成特定功能的sql语句集

经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行

存储过程就是具有名字的一段代码,用来完成一个特定的功能

创建的存储过程保存在数据库的数据字典中

 

用存储过程的好处:

将重复性很高的一些操作封装到一个存储过程中简化了对这些sql的调用

批量处理

统一接口,确保数据安全

相对于oracle数据库来说,mysql的存储过程相对功能较弱,使用较少

 

存储过程的创建和调用:

delimiter $$:

它与存储过程语法无关

delimiter语句将标准分隔符-分号(;)更改为$$

因为我们想将存储过程作为整体传递给服务器,而不是让mysql工具一次解释每个语句

告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了,默认情况下delimiter是分号;,在命令行客户端中如果有一段命令以分号结束那么回车后mysql将会执行该命令,但有时候不希望mysql这么做,在位可能输入较多的语句且语句中包含有分号,使用delimiter $$,这样只有当$$出现之后mysql解释器才会执行该段语句

 

创建存储过程:

create procedure 名称()
begin
语句
end $$

 

调用存储过程:

call 名称();

 

删除存储过程:

drop procedure 名称;

 

存储过程变量:

在存储过程中声明一个变量

 

使用declare语句:

declare 变量名 数据类型(大小) default 默认值;

可以声明一个名为total_sale的变量,数据类型为int,默认值为0

declare total_sale int default 0;

声明共享数据类型的两个或多个变量

declare x, y int default 0;

 

分配变量值:

要为变量分配一个值,可以使用set语句

set total_count = 10;

使用select into语句将查询的结果分配给一个变量

select count(*) into total_products from products;

 

变量的范围:

如果在存储过程中声明一个变量,那么当达到存储过程的end语句时,它将超出范围,因此在其他代码块中无法访问

 

存储过程参数:

三种类型:

in:表示调用者向过程传入值(传入值可以是字面或变量)

 

 out:表示过程向调用者传出值

inout:inout参数是in和out参数的组合

 

定义参数:

create produce name(模式,参数名称 数据类型(大小))

 

存储过程语句:

if语句:

if expression then
statements;
end if;

if expression then
statements;
else
else_statmemts;
end if;

 

case语句:

case case_expression
when when_expression_1 then commands
when when_expression_2 then commands
...
else commands
end case;

 

循环:

while expression do
statments
end while

repeat
statments;
until expression
end repeat

 

查看存储过程:

查看所有存储过程:

show procedure status;

查看指定数据库的存储过程

show procedure status where db=数据库名;

查看指定存储过程源代码

show create procedure 存储过程名;

 

posted on 2018-10-01 21:54  732618078  阅读(131)  评论(0编辑  收藏  举报