zoukankan      html  css  js  c++  java
  • 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语句),需要用到标签

     

     

  • 相关阅读:
    设计模式(六)Prototype Pattern 原型模式
    设计模式(五)Builder Pattern建造者模式
    Linux安装软件
    日志技术及JUL入门
    IDEA推出新字体,极度舒适
    HDFS的API操作
    Apollo的灰度发布
    Apollo整合SpringBoot开发
    Apollo配置发布原理
    Apollo应用配置
  • 原文地址:https://www.cnblogs.com/dgwblog/p/9313798.html
Copyright © 2011-2022 走看看