返回顶部
首页 > 资讯 > 数据库 >MySQL存储过程和游标
  • 815
分享到

MySQL存储过程和游标

MySQL存储过程和游标 2019-12-05 03:12:21 815人浏览 无得
摘要

一、存储过程 什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法。什么是存储过程:存储过程可以说是一个记录集,它是由一些T-sql语句组成的代码块,这些T-SQL语句代码像一个方法一样

MySQL存储过程和游标

一、存储过程

什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法。

什么是存储过程:

存储过程可以说是一个记录集,它是由一些T-sql语句组成的代码块,这些T-SQL语句代码像一个方法一样

实现一些功能(对单表或多表的增删改查),然后再给这个代码块取一个名字,在用到这个功能的时候调用

他就行了。

存储过程的好处:

  1. 由于数据库执行动作时,是先编译后执行的。然而存储过程是一个编译过的代码块,所以执行效率要比

    T-SQL语句高。

  2. 一个存储过程在程序在网络中交互时可以替代大堆的T-SQL语句,所以也能降低网络的通信量,提高通信速率。

  3. 通过存储过程能够使没有权限的用户在控制之下间接地存取数据库,从而确保数据的安全

存储过程的基本语法:

--------------------创建存储过程------------------------------------
CREATE PROCEDURE procedure_name( IN|OUT variable data_type)
BENGIN
sql_statement;
......
END;
-- Mysql支持IN(传递给存储过程)、OUT(从存储过程传出)
--
variable 变量
--
data_type 参数的数据类型
--
sql_statement 中 INTO parameter 的把值保存到相应的变量中(通过INTO关键字)
--
------------------执行存储过程------------------------------------
CALL procedure_name(@parameters);
--------------------删除存储过程------------------------------------
DROP PROCEDURE procedure_name;
-- 如果指定的过程不存在,则DROP PROCEDURE将会产生一个错误。
--
使用DROP PROCEDURE IF EXISTS
--
------------------检查存储过程------------------------------------
SHOW CREATE PROCEDURE procedure_name;
-------------------------------------------------------------------
--
为了获得包括何时、有谁创建等详细信息的存储过程列表,使用
SHOW PROCEDURE STATUS LIKE " ";
-- LIKE 指定过滤模式
备注:mysql命令行实用程序使用;作为语句分隔符,所以用命令行写存储过程自身内的;字符,会使存储过程的SQL出现句法错误。解决办法是临时更改命令行的语句分隔符,如下所示:
-- 更改MySQL分隔符 除符号外,任何字符都可以用作语句分隔符。
DELIMITER //
DELIMITER ;

存储过程示例:

场景:

你需要获得与以前一样的订单合计,但需要对合计增加营业税,不过只针对某些顾客。那么,你需要做下面几件事情:

  • 获得合计;

  • 把营业税有条件地添加到合计;

  • 返回合计(带或不带税)。

存储过程的完整工作如下:

-- Name: ordertotal
--
Parameters: onumber = order number
-- taxable = 0 if not taxable, 1 if taxable
-- ototal = order total variable
DROP PROCEDURE IF EXISTS ordertotal;
CREATE PROCEDURE ordertotal(
IN onumber INT,
IN taxable BOOLEAN,
OUT ototal
DECIMAL(8,2)
) COMMENT
"Obtion ordertotal, optionally adding tax"
BENGIN
-- Declare variable for total
DECLARE total DECIMAL(8,2);
-- Declare tax percentage
DECLARE taxrate INT DEFAULT 6;
-- Get the order total
SELECT Sum(item_pricequantity)
FROM orderitems
WHERE order_num = onumber
INTO total;
-- Is this taxable?
IF taxable THEN
-- Yes, so add taxrate to the total
SELECT total+(total/100
taxrate) INTO total;
END IF;
-- And finally, save to out variable
SELECT total INTO ototal;
END;

执行存储过程:

CALL ordertotal(20005, 0, @total);
SELECT @total;

1580031909831

CALL ordertotal(20005, 1, @total);
SELECT @total;

1580031874363

二、游标

什么是游标以及如何使用游标。

什么是游标:

MySQL检索操作返回一组结果集。MySQL使用简单的select语句没有办法得到第一行、下一行或前10行,也不能成批地处理它们。

  • 游标可以从结果集中做到返回单个结果

  • 使用游标可以轻易的取出在检索出来的行中前进或后退一行或多行的结果

  • 游标可以遍历返回的多行结果。

补充:MySQL中游标只适用于存储过程以及函数。

使用游标步骤:

  1. 在能够使用游标前,必须声明(定义)它。这个过程实际上没有检索数据,它只是定义要使用的select语句。

  2. 一旦声明后,必须打开游标以供使用。这个过程用前面定义的select语句把数据实际检索出来。

  3. 对于有数据的游标,根据需要取出(检索)各行。

  4. 在结束游标使用时,必须关闭游标。

在声明游标后,可根据需要频繁地打开和关闭游标。在游标打开后,可根据需要频繁地执行取操作。

语法:

  1. 定义游标

    DECLARE <游标名> CURSOR
    FOR
    select语句;
  2. 打开游标

    OPEN <游标名>;
  3. 使用游标

    使用游标需要用关键字FETCH来取出数据,然后取出的数据需要有存放的地方,我们需要用declare声明变量存放列的数据其语法格式为:

    DECLARE variable1 数据类型(与列值的数据类型相同);
    FETCH [NEXT|PRIOR|FIRST|LAST] FROM <游标名> INTO [variable1,variable2,…]
  4. 关闭游标

    CLOSE <游标名>;

游标示例:

DROP PROCEDURE IF EXISTS processorders;
CREATE PROCEDURE processorders()
BEGIN
-- Declare local variables
DECLARE done BOOLEAN DEFAULT 0;
DECLARE o INT;
DECLARE t DECIMAL(8,2);
-- Declare the cursor
DECLARE ordernumbers CURSOR
FOR
SELECT order_num FROM orders;
-- Declare continue handler
DECLARE CONTINUE HANDLER FOR SQLSTATE "02000" SET done = 1;
-- Create a table to store the result
CREATE TABLE IF NOT EXISTS ordertotals(
id
INT PRIMARY KEY AUTO_INCREMENT,
order_num
INT NOT NULL,
total
DECIMAL(8,2)
);
-- Open the cursor
OPEN ordertotals;
-- Loop through all rows
REPEAT
-- Get order number
FETCH ordertotals INTO o;
-- Get the total for this order
CALL ordertotal(o, 1, t);
-- Insert order and total into ordertotals
INSERT INTO ordertotals(order_num, total) VALUES(o, t);
-- End of loop
UNTIL done END REPEAT;
-- Close the cursor
CLOSE ordertotals;
END;
CALL ordertotal();
SELECT * FROM ordertotals;

1580038166242

三、MySQL学习脚本:

链接:https://pan.baidu.com/s/1U4HI-AC49ZUb730odAUkjw 提取码:lti7

您可能感兴趣的文档:

--结束END--

本文标题: MySQL存储过程和游标

本文链接: https://lsjlt.com/news/3874.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MySQL存储过程和游标
    一、存储过程 什么是存储过程,为什么要使用存储过程以及如何使用存储过程,并且介绍创建和使用存储过程的基本语法。什么是存储过程:存储过程可以说是一个记录集,它是由一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样...
    99+
    2019-12-05
    MySQL存储过程和游标
  • 存储过程+游标
    delimiter //drop procedure if exists `test` //CREATE  PROCEDURE `test`() comment '测试存储过程'BEGI...
    99+
    2024-04-02
  • mysql:存储过程-游标遍历
    前情提要 因工作需要要写一些sql脚本,进行一些数据的修改。 直接在数据库ide中写sql涉及就到一些逻辑的判断。 比如判断根据参数判断这条数据存不存在,不存在插入,存在则删除。 最开始查搜索引擎mysql是支持if判断的,根据格式写完...
    99+
    2023-09-27
    java 后端 mysql sql
  • MYsql-存储过程-游标的嵌套
    在ITPUB: http://www.itpub.net/viewthread.phptid=1134085&pid=13049789&page=1&extra=#pid13049789上有人发贴说游标不...
    99+
    2024-04-02
  • MySQL-存储过程、流程控制、游标
    存储过程 存储过程概述 1.产生背景 开发过程总,经常会遇到重复使用某一功能的情况 2.解决办法 MySQL引人了存储过程(Stored Procedure)这一技术 3.存储过程 存储过程就是一条或...
    99+
    2023-10-11
    sql
  • MySql存储过程和游标的使用实例
    目录前言1.创建存储过程。2.查看存储过程名称3.调用存储过程4.删除存储过程总结前言 这里存储过程和游标的定义和作用就不介绍了,网上挺多的,只通过简单的介绍,然后用个案例让大家快速...
    99+
    2024-04-02
  • mysql存储过程中游标怎么用
    这篇文章将为大家详细讲解有关mysql存储过程中游标怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 DELIMITER $$USE `...
    99+
    2024-04-02
  • mysql存储过程中游标怎样遍历
    这篇文章主要介绍了mysql存储过程中游标怎样遍历,具有一定借鉴价值,需要的朋友可以参考下。希望大家阅读完这篇文章后大有收获。下面让小编带着大家一起了解一下。mysql存储过程中游标遍历的方法:首先取值,取...
    99+
    2024-04-02
  • mysql数据库存储过程之游标(光标cursor)
    游标是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、open、fetch和close。 一、语法。 #声明游标declare 游标名称 cursor for 查询语句;#开启游...
    99+
    2023-09-02
    数据库 sql
  • 如何在mysql存储过程中使用游标
    本篇文章给大家分享的是有关如何在mysql存储过程中使用游标,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在处理存储过程中的结果集时,可以使用...
    99+
    2024-04-02
  • mysql存储过程的游标有什么作用
    这篇文章主要讲解了“mysql存储过程的游标有什么作用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql存储过程的游标有什么作用”吧! ...
    99+
    2024-04-02
  • mysql的存储过程、游标 、事务有什么用
    这篇文章给大家分享的是有关mysql的存储过程、游标 、事务有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。mysql的存储过程、游标 、事务实例详解下面是自己曾经编写过的...
    99+
    2024-04-02
  • oracle中创建存储过程,以及存储过程中调用游标
    CREATE OR REPLACE PROCEDURE aa is   CURSOR prodCombind_cur IS SELECT * FROM proddata...
    99+
    2024-04-02
  • 通用游标分页存储过程PageSplit
    ALTER procedure [dbo].[PageSplit] @sql varchar(max),--要执行的sql语句 @page int=1, --要显示的页码 @pageSize i...
    99+
    2024-04-02
  • oracle 存储过程两次遍历游标
            在一个存储过程中有两个游标,而且第二个游标用到了第一个游标的值,这样的存储过程怎么写呢?以下是个例子:create or...
    99+
    2024-04-02
  • oracle存储过程游标怎么使用
    在Oracle存储过程中,使用游标可以迭代访问结果集。以下是使用游标的一般步骤:1. 声明游标:在存储过程的声明部分,使用`CURS...
    99+
    2023-09-21
    oracle
  • oracle存储过程的游标是什么
    Oracle存储过程中的游标是一种用于遍历和访问查询结果集的数据库对象。游标可以被认为是指向某个查询结果集的指针,通过游标可以逐行地...
    99+
    2023-08-24
    oracle
  • MySQL存储过程详解 mysql 存储过程
    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Proce...
    99+
    2024-04-02
  • oracle存储过程中游标怎么使用
    在Oracle存储过程中,可以使用游标来处理查询结果集。游标允许逐行处理查询结果,类似于使用指针遍历数据。以下是在Oracle存储过...
    99+
    2023-09-09
    oracle
  • MYSQL存储过程开发中怎么使用游标嵌套
    本篇内容介绍了“MYSQL存储过程开发中怎么使用游标嵌套”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在实...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作