美文网首页
数据库(17)存储过程

数据库(17)存储过程

作者: 錦魚 | 来源:发表于2018-09-21 19:28 被阅读0次

存储过程

这是什么
  • 一组可编程的函数,是为了完成特定功能的SQL语句集
  • 存储过程就是具有名字的一段代码.用来完成一个特定 的功能
  • 创建存储过程保存在数据库的数据字典中
为什么用
  • 将重复性很高的一些操作,封装到一个存储过程中,简化了对这些SQL的调用
  • 批量处理
  • 统一接口,确保数据的安全
  • 相对于oracle数据库来说,mysql的存储过程相对功能比较弱,使用较少


存储过程的创建和调用

delimiter

原来我们是这样执行我们的sql语句的(封号意味着sql语句的结束)

使用delimiter设置

例子

delimiter $$$
select * from xxx $$$
delimiter总结
  • 它与存储过程语法无关
  • delimiter语句将标准分隔符 - 分号(;)更改为:$$
  • 因为我们想将存储过程作为整体传递给服务器
  • 而不是让mysql工具一次解释每个语句
  • 告诉mysql解释器,该段命令是否已经结束了,mysql是否可以执行了.默认情况下,delimiter是分号(;)在命令行客户端中,如果有一行命令以分号结束,那么回车以后,mysql将会执行该命令.但是有的时候,我们不希望mysql这么做.在为可能输入较多的语句且语句中包含分号就可以通过使用delimiter ,这样只有当出现后,mysql解释器才会执行这段语句

创建存储过程

  • 语法:

CREATE PROCEDURE 名称()
BEGIN
语句
END$$

调用存储过程

  • 语法:

CALL 名称();



查看存储过程

查看所有存储过程

SHOW PROCEDURE STATUS;

查看指定数据库的存储过程

SHOW PROCEDURE STATUS WHERE db = '数据库的名字'

查看指定存储过程源代码

SHOW CREATE PROCEDURE 存储过程名;



删除存储过程

DROP PROCEDURE show_emp;



存储过程变量

在存储过程中声明一个变量使用
DECLARE
例子
delimiter $$
CREATE PROCEDURE test()
BEGIN

-- 声明2个变量
DELCLARE res VARCHAR(255) DEFAULT '';
DELCLARE x,y INT DEFAULT 0;

SELECT AVG(salary) FROM emp;
END$$

分配变量值

要为变量分配一个值,可以使用SET语句

delimiter $$
CREATE PROCEDURE test()
BEGIN

-- 声明2个变量
DELCLARE res VARCHAR(255) DEFAULT '';
DELCLARE x,y INT DEFAULT 0;

-- 设置变量
SET x = 3;
SET y = 4;

SELECT AVG(salary) FROM emp;
END$$

使用SELECT INTO语句将查询的结果分配给一个变量

DELCLARE avgRes DOUBLE DEFAULT 0;
SELECT AVG(salary) INTO avgRes FROM emp

变量范围

存储过程参数

三种类型

  • IN
  • OUT
  • INOUT
    • 根据传入的名称,获取对应的信息
  -- IN
  delimiter $$
  CREATE PROCEDURE getName(IN name VARCHAR(255))
  BEGIN
  SELECT * FROM emp WHERE ename = name;

  END$$
  delimiter;

  -- 调用(查鲁班)
  CALL getName('鲁班');
  -- 调用(查李白)
  CALL getName('李白');


  -- INOUT
  delimiter $$
  CREATE PROCEDURE test(INOUT num INT,in inc INT)
  BEGIN
  SET num = num + inc
  END$$
  delimiter;

  SET @num1 = 20;
  CALL test(@num1,10);

  SELECT @num1;
  • 给我一个名字,找到这个名字的薪资
    -- OUT
    delimiter $$
    CREATE PROCEDURE getSalary(IN name VARCHAR(255),OUT salary INT)
    
    BEGIN
    SELECT salary INTO salary FROM emp WHERE ename = n;
    
    END$$
    delimiter;
    
    CALL getSalary('鲁班',@sy)
    
    SELECT @sy;
    
  • 语法

    CREATE PROCEDURE name(模型 参数名称 数据类型 (大小))
    

存储过程语句

IF语句
IF expression THEN
statements;
END IF;
CASE语句
CASE case_expression
WHEN when_expression_1 THEN commands
WHEN when_expression_2 THEN commands
...
ELSE commands
END CASE;

循环

第一种:
WHILE expression DOstatementsEND WHILE
第二种:
REPEAT
statements
UNTIL expression
END REPEAT

相关文章

  • Oracle存储过程语法详解—及8道案例练习

    本文主要讲解ORACLE数据库的存储过程,如果想学习了解MYSQL数据库的存储过程可参考本篇文章mysql存储过程...

  • 存储过程

    数据库存储过程

  • SQL Server存储过程总结

    SQL Server存储过程总结 存储过程简介: 存储过程(Stored Procedure)是在大型数据库中,一...

  • 存储过程

    1.什么是存储过程: 存储过程与存储函数 存储过程是数据库预先编译好,放在数据库内存中的一个程序片段,所有具备性能...

  • Oracle学习笔记(六)

    数据库对象:表、视图、索引、序列、同义词、存储过程、存储函数、包头、包体。 存储过程和存储函数是指在数据库中提供所...

  • 17 存储过程

    过程: 函数: 过程是没有返回值的函数 存储过程: 存储过程语法 存储过程1--创建简单的存储过程 存储过程2--...

  • SQL语言:存储过程

    前言 本章我们将学习数据库中的存储过程,了解什么是存储过程,以及在MySQL中创建和调用存储过程。 存储过程是什么...

  • sql基础(4)存储过程

    (一)存储过程常用SQL命令 -- 存储过程 use test #打开数据库 show PROCE...

  • 存储过程

    在数据库编程过程中经常会用到存储过程 , 相比 SQL 语句 , 存储过程更方便 , 快速 , 安全 ; 先将存储...

  • MySQL 高级特性(六):存储过程的优缺点分析

    MySQL 5.0 版本开始支持存储过程。存储过程(Stored Procedure)是数据库中存储的复杂程序,以...

网友评论

      本文标题:数据库(17)存储过程

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