Fork me on Gitee

MySQL存储过程的创建及调用

原文连接 https://www.cnblogs.com/geaozhang/p/6797357.html#chuangjian

#SQL语句:先编译后执行

存储过程(Stored Procedure):

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

 

优点(为什么要用存储过程?):

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

  ②批量处理:SQL+循环,减少流量,也就是“跑批”

  ③统一接口,确保数据的安全

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

 

一、存储过程的创建和调用

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

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

1、创建存储过程

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]

2.如何使用存储过程

实际上没有必要记一些语法格式,只要知道如何完成实际业务逻辑就行

这里我们针对user表演示一个存过程操作 在navigat中叫函数,我其实觉得存储过程与自定义函数没有任何区别

这里如何理解

二、存储过程的参数

  存储过程可以有0个或多个参数,用于存储过程的定义。

3种参数类型:

  IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)  //通过 set @name=xxx设置变量

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

  INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量) //设置一个变量可以反复读取

 看到这几个参数想必都明白,这里我们选择in 测试一个sql语句 update set where

编辑好以后 自动把没有意思语句创建好了

下面写核心语句

这样就完成一个存储过程,选择运行输入就能进行测试

 CALL sss('name')  //调用存储过程:call sp_name[(传参)];

3、存储过程体

  >存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等

  >过程体格式:以begin开始,以end结束(可嵌套)

复制代码
BEGIN
  BEGIN
    BEGIN
      statements; 
    END
  END
END
复制代码

注意:每个嵌套块及其中的每条语句,必须以分号结束,表示过程体结束的begin-end块(又叫做复合语句compound statement),则不需要分号。

 

 

4、为语句块贴标签

[begin_label:] BEGIN
  [statement_list]
END [end_label]

例如:

复制代码
label1: BEGIN
  label2: BEGIN
    label3: BEGIN
      statements; 
    END label3 ;
  END label2;
END label1
复制代码

标签有两个作用:

  ①增强代码的可读性

  ②在某些语句(例如:leave和iterate语句),需要用到标签

 

 

posted @ 2018-07-15 15:58  ---dgw博客  阅读(2403)  评论(0编辑  收藏  举报