美文网首页
存储过程与自定义函数

存储过程与自定义函数

作者: 明月几何8 | 来源:发表于2021-02-26 13:44 被阅读0次

存储过程

正儿八经解释

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

个人理解

这不就是写方法吗,可以接受参数,可以有返回值,根据名字去调用,隐藏了复杂的逻辑,就和写接口一样呀,不用关心怎么实现的,通过接口拿数据就行。

优点

存储过程可封装,并隐藏复杂的商业逻辑。
存储过程可以回传值,并可以接受参数。
存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。
存储过程可以用在数据检验,强制实行商业逻辑等。

缺点

存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。
存储过程的性能调校与撰写,受限于各种数据库系统。

创建存储过程的语法规则,菜鸟教程给的,说实话挺难理解的

CREATE
    [DEFINER = { user | CURRENT_USER }]
 PROCEDURE sp_name ([proc_parameter[,...]])
    [characteristic ...] routine_body
 
proc_parameter:
    [ IN | OUT | INOUT ] param_name type
 
characteristic:
    COMMENT 'string'
  | LANGUAGE SQL
  | [NOT] DETERMINISTIC
  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }
  | SQL SECURITY { DEFINER | INVOKER }
 
routine_body:
  Valid SQL routine statement
 
[begin_label:] BEGIN
  [statement_list]
    ……
END [end_label]

拿一个例子做演示吧,其实是菜鸟教程的例子,拿来用一用

需求:删除给定球员参加的所有比赛。然后对应的存储过程是下面这样的,还是比较好理解的

create procedure delete_matches(in p_playerno integer)
begin
    delete from matches where playerno = p_playerno;
end

前面的create procedure 固定语法,delete_matches是存储过程名称,后面小括号里对于参数,in表示输入参数,除此之外还有outinoutp_playerno参数名,integer参数类型,beginend表示存储过程的开始和结束,按我理解就好像是方法的{ },中间写具体的逻辑

MYSQL 存储过程中的关键语法

声明语句结束符,可以自定义:

DELIMITER $$
或
DELIMITER //

声明存储过程:

CREATE PROCEDURE demo_in_parameter(IN p_in int)       

存储过程开始和结束符号:

BEGIN .... END    

变量赋值:

SET @p_in=1  

变量定义:

DECLARE l_int int unsigned default 4000000; 

创建mysql存储过程、存储函数:

create procedure 存储过程名(参数)

存储过程体:

create function 存储函数名(参数)
存储过程的参数

存储过程的参数分为

  • IN输入参数:可以是字面量或者变量
  • OUT输出参数:只能是变量
  • INOUT输入输出参数:只能是变量
变量:

局部变量的声明一定要放在存储过程体的开始:也就是放到begin的后面,否则会报错

SET 变量名 = 表达式值 [,variable_name = expression ...]  // 变量赋值

用户变量名一般以@开头

存储过程的调用

用call和存储过程名称以及一个括号,括号里根据需要加入参数,举个栗子吧

call procedure_test('hello word');
MySQL存储过程的控制语句

1、变量作用域:内部变量只在所在的begin ...end中有效,

2、条件语句:

  • if-then-else (相当于if判断)
  • case语句(相当于switch case)

3、循环语句:

  • while ···· end while(相当于while循环)
  • repeat···· end repeat(相当于do···while)
  • oop ·····end loop (相当于while(true)里加了break)
  • LABLES 标号 可用在 begin repeat while 或者 loop 语句前,可以配合leave跳出循环

4、ITERATE迭代:

https://www.runoob.com/w3cnote/mysql-stored-procedure.html

自定义函数

自定义函数是一种与存储过程十分相似的过程式数据库对象。它与存储过程一样,都是由 SQL 语句和过程式语句组成的代码片段,并且可以被应用程序和其他 SQL 语句调用。

感觉对自定义函数和存储过程理解差不多的,也类似一个方法

自定义函数与存储过程之间的区别

自定义函数不能拥有输出参数,这是因为自定义函数自身就是输出参数;而存储过程可以拥有输出参数。
自定义函数中必须包含一条 RETURN 语句,而这条特殊的 SQL 语句不允许包含于存储过程中。
可以直接对自定义函数进行调用而不需要使用 CALL 语句,而对存储过程的调用需要使用 CALL 语句。

语法格式如下

CREATE FUNCTION <函数名> ( [ <参数1> <类型1> [ , <参数2> <类型2>] ] … )
  RETURNS <类型>
  <函数主体>

自定义函数的语法比存储过程理解起来好多了

定义一个两数相加的函数

CREATE FUNCTION function_test(param1 int, param2 int) RETURNS int(11)
BEGIN
    # 定义一个局部变量result
    declare result int;
    # 给result赋值
    set result = param1 + param2;
    # 返回result
    RETURN result;
END

相关文章

  • 存储过程与函数

    存储过程与函数存储过程的定义存储过程的创建存储过程的操作自定义函数 存储过程与函数 存储过程的定义 运行效率高 降...

  • Ooracle-自定义函数

    需求:判断某个字符是否为数字 自定义函数过程 通过存储过程调用自定义函数 以上为自定义函数并且通过存储过程调用该函...

  • MySQL自定义函数

      MySQL除了内置了丰富的函数方便用户调用外,还支持用户进行自定义函数。自定义函数与存储过程类似,也是一组预先...

  • 存储过程与自定义函数

    存储过程 正儿八经解释 个人理解 优点 缺点 创建存储过程的语法规则,菜鸟教程给的,说实话挺难理解的 拿一个例子做...

  • 存储过程与存储函数

    根据慕课网课程Oracle存储过程和自定义函数整理 1.概念 (1)定义:存储在数据库中供所有用户程序调用的子程序...

  • 存储过程与存储函数

    存储过程和函数是在数据库中定义一些SQL语句的集合,然后直接调用这些存储过程和函数来执行已经定义好的SQL语句。存...

  • 存储过程和函数、流程控制结构备忘录

    [TOC] 存储过程和函数 变量 系统变量 全局变量 会话变量 自定义变量 用户变量 局部变量 存储过程 创建语法...

  • 存储过程与函数

    1、存储过程和函数类似于java中的方法,是一组预先编译好的SQL语句的集合。 2、区别: 3、存储过程的优点:

  • 函数与存储过程

    MYSQL常用函数 聚焦函数1.avg2.count3.max4.min5.sum 字符串函数1.concat(s...

  • MySQL语法模板 SQL语句:函数、存储过程

    创建函数 创建存储过程 修改函数 修改存储过程 调用 删除函数 删除存储过程

网友评论

      本文标题:存储过程与自定义函数

      本文链接:https://www.haomeiwen.com/subject/bammfltx.html