0
点赞
收藏
分享

微信扫一扫

数据库存储过程写作要点

海牙秋天 2022-05-06 阅读 96

存储过程(存过)

mysql 5.0 以后版本才开始支持存储过程

存储过程:是一种在数据库中存储的复杂的程序,以便外部程序或者其他应用程序对数据进行调用的数据库对象。

两个要点:存储在数据库中 复杂的程序

被调用         

简单的来说:存储过程就是在数据库中编写代码,目的是为了完成特定的任务或者功能的 SQL 的集合,它是一个

            语句集,经过编辑保存到数据库中,可以让指定的用户对其进行调用,提升效率。                       

即:是数据库中 SQL 层面的代码的封装和调用。

优点:

    1、可封装,并且隐藏复杂的商业逻辑

    2、可以进行回传值,并且可以接收参数

    3、可以让复杂的语句封装成简单的函数或者子程序

    4、可以用在数据校验,企业规则,内部逻辑比较复杂的业务上

缺点:

    1、存储过程对数据库的依赖很大,定制化在特定的数据库上,支持的语言规范不一样

    2、可移植性一般,复用率低

    3、无法直接使用 SELECT 指令进行运行,因为是子程序

创建存储过程的语法:

CREATE PROCEDURE 过程名([IN OUT INOUT] 参数名 数据类型,[IN OUT INOUT] 参数名 数据类型,...)

BEGIN

存储过程的参数

mysql 中参数的定义,一共支持三种类型:  IN  OUT  INOUT

IN 输入参数:表示调用者向过程传入值(可以是具体的值,也可以是变量)

OUT 输出参数:表示过程向调用者传出值(可以返回多个值,传出的值只能是变量);

INOUT 输入输出参数:表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)。

注意:存储过程支持没有参数,即使没有参数,但是过程名后面的()必须要有,不可以省略;

      参数的名字不能等于列名,否则的话在执行过程体的时候,参会会被当做整个列来出来。  

# 过程体

由合法的 SQL 语句构成,即 SQL 命令集,可执行,过程体包含了过程调用执行的所有的 SQL 语句:

例如: DQL 、DML 、DDL 、IF-THEN-ELSE 等等,以及申明变量。

过程体的格式: 以 BEGIN 开始,以 END 结束(可以嵌套)

# 调用

1)可以使用一个 CALL 命令通过名字对存储进行调用;

    CALL 存储过程的名称();

2) 可以供外部程序调用,比如 Java 程序,比如 python 。

存储过程实例

# 实例:不带参数的存储过程

CREATE PROCEDURE p1()

BEGIN

   SELECT 'hello world!' ;

END;

错误代码: 1064

You have an error in your SQL syntax; check the manual that corresponds to

your MySQL server version for the right syntax to use near '' at line 3

报错的原因,是语句命令没有正确结束,是因为 ; 界定符造成的,解决办法,修改界定符

# 修改界定符  ;  为 // 或者 $$ , 目的是让 ; 暂时失效,不表示语句结束

修改界定符  delimiter

DELIMITER //

CREATE PROCEDURE p1()

BEGIN

   SELECT 'hello world!' ;

END;

//

调用

CALL p1;  -- 每调用一次存储过程,就相当于把过程体执行一次

CALL p1();  -- 调用的时候,没有参数的存储过程,()可以加,也可以不加

举报

相关推荐

0 条评论