irpas技术客

存储过程与存储函数_lzz未来会更好_存储过程函数

大大的周 3383

目录

存储过程

使用存储过程的好处

和视图、函数的对比

分类

创建存储过程

调用存储过程

存储函数

用法:

调用存储函数


存储过程 使用存储过程的好处

1、简化操作,提高了sql语句的重用性,减少了开发程序员的压力

2、减少操作过程中的失误,提高效率

3、减少网络传输量(客户端不需要把所有的 SQL 语句通过网络发给服务器)

4、减少了 SQL 语句暴露在 网上的风险,也提高了数据查询的安全性

和视图、函数的对比

它和视图有着同样的优点,清晰、安全,还可以减少网络传输量。不过它和视图不同,视图是 虚拟表 , 通常不对底层数据表直接操作,而存储过程是程序化的 SQL,可以 直接操作底层数据表 ,相比于面向集 合的操作方式,能够实现一些更复杂的数据处理。

一旦存储过程被创建出来,使用它就像使用函数一样简单,我们直接通过调用存储过程名即可。相较于 函数,存储过程是 没有返回值 的。

分类

in、out、inout

注意:IN、OUT、INOUT 都可以在一个存储过程中带多个。

创建存储过程

CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...)

[characteristics ...]

BEGIN

存储过程体

END

characteristics 表示创建存储过程时指定的对存储过程的约束条件,其取值信息如下:

1)language sql: 存储过程由SQL语句组成,目前sql是language特性的唯一值;

2)[not] deterministic: 表示结果是否为确定的值,即相同输入是否一定能得到相同输出,默认为not deterministic;

3)contains sql(存储过程包含sql语句,但不包含读写数据的语句)| no sql(存储过程不包含sql语句)| reads sql data(存储过程包含读数据的语句)|modifies sql data(存储过程包含读写数据的语句)

4)sql security {definer(只有定义者可以执行该存储过程)|invoker(拥有权限的调用者可以执行)} ,默认definer

5)comment 'string'(注释,描述存储过程)

DELIMITER 新的结束标记 (Navicat中可以省略)

调用存储过程

CALL 存储过程名(实参列表);

存储函数 用法:

CREATE FUNCTION 函数名(参数名 参数类型,...)

RETURNS 返回值类型 [characteristics ...]

BEGIN

函数体 #函数体中肯定有 RETURN 语句

END

说明:

1、参数列表:指定参数为IN、OUT或INOUT只对PROCEDURE是合法的,FUNCTION中总是默认为IN参 数。

2、RETURNS type 语句表示函数返回数据的类型; RETURNS子句只能对FUNCTION做指定,对函数而言这是 强制 的。它用来指定函数的返回类型,而且函 数体必须包含一个 RETURN value 语句。

3、characteristic 创建函数时指定的对函数的约束。取值与创建存储过程时相同,这里不再赘述。

4、函数体也可以用BEGIN…END来表示SQL代码的开始和结束。如果函数体只有一条语句,也可以省略 BEGIN…END。

调用存储函数

select 函数名(实参列表);


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #存储过程函数 #SQL #语句通过网络发给服务器4减少了 #语句暴露在