当前位置: 首页 > news >正文

一个简单的存储过程的学习以及使用

我这边所做的存储过程的功能主要是,对一些表或一个表的数据 进行查询 ,之后将所查询的数据赋予给新的表中.

操作如下:

1.创建表

2.创建存存储过程

3.执行存储过程

4.比对表之间的数据

下面的是参考别人的一个存储过程:

 

create procedure my_procedure() -- 创建存储过程
begin -- 开始存储过程
declare my_id varchar(32); -- 自定义变量1
declare my_name varchar(50); -- 自定义变量2
DECLARE done INT DEFAULT FALSE; -- 自定义控制游标循环变量,默认false
 
DECLARE My_Cursor CURSOR FOR ( SELECT id, name FROM t_people ); -- 定义游标并输入结果集
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; -- 绑定控制变量到游标,游标循环结束自动转true
 
OPEN My_Cursor; -- 打开游标
  myLoop: LOOP -- 开始循环体,myLoop为自定义循环名,结束循环时用到
    FETCH My_Cursor into my_id, my_name; -- 将游标当前读取行的数据顺序赋予自定义变量12
    IF done THEN -- 判断是否继续循环
      LEAVE myLoop; -- 结束循环
    END IF;
    -- 自己要做的事情,在 sql 中直接使用自定义变量即可
    UPDATE t_user SET c_name = my_name WHERE id = my_id and rtrim(ltrim(c_name)) = ''; -- 左右去空格
 
    COMMIT; -- 提交事务
  END LOOP myLoop; -- 结束自定义循环体
  CLOSE My_Cursor; -- 关闭游标
END; -- 结束存储过程


下面是之前需要写的一个SQl 包含建表的sql

DROP TABLE
IF
EXISTS `report_seller_settle`;
CREATE TABLE
IF
NOT EXISTS `report_seller_settle` (
  `id` BIGINT ( 20 ) NOT NULL,
  `seller_id` BIGINT ( 20 ) DEFAULT '0' COMMENT '商家ID',
  `seller_name` VARCHAR ( 200 ) DEFAULT '' COMMENT '商家名称',
  `money_amount` DECIMAL ( 10, 2 ) DEFAULT '0.00' COMMENT '结算现金总额',
  `efenbao_integral_amount` INT ( 11 ) DEFAULT '0' COMMENT 'e分宝积分总额',
  `icon_integral_amount` INT ( 11 ) DEFAULT '0' COMMENT '惠金币总额',
  `voucher_amount` DECIMAL ( 10, 2 ) DEFAULT '0.00' COMMENT '代金券总额',
  `gift_amount` DECIMAL ( 10, 2 ) DEFAULT '0.00' COMMENT '礼品卡总额',
  `comm_amount` DECIMAL ( 10, 2 ) DEFAULT '0.00' COMMENT '佣金总额',
  `promotion_paid_amount` DECIMAL ( 10, 2 ) DEFAULT '0.00' COMMENT '活动优惠金额',
  `settle_amount` DECIMAL ( 10, 2 ) DEFAULT '0.00' COMMENT '结算金额',
  `year` INT ( 11 ) DEFAULT '0' COMMENT '结算日期-年',
  `month` INT ( 11 ) DEFAULT '0' COMMENT '结算日期-月',
  `day` INT ( 11 ) DEFAULT '0' COMMENT '结算日期-日',
  `report_time` date DEFAULT '3000-12-31' COMMENT '结算日期',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY ( `id` ) USING BTREE
) ENGINE = INNODB AUTO_INCREMENT = 3333 DEFAULT CHARSET = utf8mb4 COMMENT = '商家结算报表';


DROP PROCEDURE
IF
EXISTS `SELECT_SELLER_SETTLE`;
DELIMITER //
CREATE PROCEDURE `SELECT_SELLER_SETTLE` ( ) BEGIN
  -- 声明变量
  DECLARE
  NO_MORE_RECORD INT DEFAULT 0;
  DECLARE
  `r_id` BIGINT ( 20 );
  DECLARE
  `r_sellerId` BIGINT ( 20 );
  DECLARE
  `r_sellerName` VARCHAR ( 200 );
  DECLARE
  `r_moneyAmount` DECIMAL ( 10, 2 );
  DECLARE
  `r_efenbaoIntegralAmount` INT ( 11 );
  DECLARE
  `r_iconIntegralAmount` INT ( 11 );
  DECLARE
  `r_voucherAmount` DECIMAL ( 10, 2 );
  DECLARE
  `r_giftAmount` DECIMAL ( 10, 2 );
  DECLARE
  `r_commAmount` DECIMAL ( 10, 2 );
  DECLARE
  `r_promotionPaidAmount` DECIMAL ( 10, 2 );
  DECLARE
  `r_sellerAmount` DECIMAL ( 10, 2 );
  DECLARE
  `r_year` INT ( 11 );
  DECLARE
  `r_month` INT ( 11 );
  DECLARE
  `r_day` INT ( 11 );
  DECLARE
  `r_reportTime` date;
  DECLARE
  `r_createTime` date;
  -- 声明游标
  DECLARE
    r_cursor CURSOR FOR SELECT
                               id,
                               seller_id,
                               seller_name,
                               money_amount,
                               efenbao_integral_amount,
                               icon_integral_amount,
                               voucher_amount,
                               gift_amount,
                               comm_amount,
                               promotion_paid_amount,
                               settle_amount,
                               `year`,
                               `month`,
                               `day`,
                               report_time,
                               create_time
                        FROM
                             emateshop.seller_settle_report
                        ORDER BY
                                 report_time DESC,
                                 `id` ASC;
  DECLARE
  CONTINUE HANDLER FOR NOT FOUND
  SET NO_MORE_RECORD = 1;
  TRUNCATE  table report_seller_settle;
  OPEN r_cursor;
  REPEAT
    FETCH r_cursor INTO r_id,
      r_sellerId,
      r_sellerName,
      r_moneyAmount,
      r_efenbaoIntegralAmount,
      r_iconIntegralAmount,
      r_voucherAmount,
      r_giftAmount,
      r_commAmount,
      r_promotionPaidAmount,
      r_sellerAmount,
      r_year,
      r_month,
      r_day,
      r_reportTime,
      r_createTime;
    IF NOT NO_MORE_RECORD THEN
    REPLACE INTO report_seller_settle (
        id,
        seller_id,
        seller_name,
        money_amount,
        efenbao_integral_amount,
        icon_integral_amount,
        voucher_amount,
        gift_amount,
        comm_amount,
        promotion_paid_amount,
        settle_amount,
        `year`,
        `month`,
        `day`,
        report_time,
        create_time
        )
    VALUES
           (
               r_id,
               r_sellerId,
               r_sellerName,
               r_moneyAmount,
               r_efenbaoIntegralAmount,
               r_iconIntegralAmount,
               r_voucherAmount,
               r_giftAmount,
               r_commAmount,
               r_promotionPaidAmount,
               r_sellerAmount,
               r_year,
               r_month,
               r_day,
               r_reportTime,
               r_createTime
               );
  END IF;
  UNTIL NO_MORE_RECORD
  END REPEAT;
  CLOSE r_cursor;

END//
DELIMITER ;

另外调用存储过程

call 存储过程的名字();

 

转载于:https://www.cnblogs.com/shenyanrushang/p/10852500.html

相关文章:

  • 除中文外的正则_优质中文NLP资源集合,做项目一定用得到!
  • 快速幂取模算法代码
  • 三十天学会绘画pdf_素描基础必学的观察法,全套PDF电子书下载!
  • .NET Core 版本不支持的问题
  • all方法 手写promise_Promise 所有方法实现
  • Java 的单元测试
  • 以下不属于时序逻辑电路的有_学习笔记:时序电路基础
  • 【字符串处理】关于KMP算法输出的是什么代码
  • 好分数阅卷3.0_揭秘!自考阅卷的批改套路!
  • 手机沙盒隔离软件_最好别装手机杀毒软件,不仅没用反而是累赘!
  • 一个简单的注册页面
  • 主进程和子进程_Python 简明教程 26,Python 多进程编程
  • golang文件下载断点续传(下载客户端)
  • 天体运行轨迹_按彗星轨迹,太阳系中存在第二平面,有可能是彗星的“第二家园”...
  • 一个网页打开的全过程
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • codis proxy处理流程
  • ES6语法详解(一)
  • HTML5新特性总结
  • Java 内存分配及垃圾回收机制初探
  • Mocha测试初探
  • Python进阶细节
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • vue脚手架vue-cli
  • 第2章 网络文档
  • 高程读书笔记 第六章 面向对象程序设计
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 简单实现一个textarea自适应高度
  • 算法-插入排序
  • 微信公众号开发小记——5.python微信红包
  • 我的面试准备过程--容器(更新中)
  • 小试R空间处理新库sf
  • 协程
  • 用quicker-worker.js轻松跑一个大数据遍历
  • 在Mac OS X上安装 Ruby运行环境
  • mysql面试题分组并合并列
  • 阿里云服务器如何修改远程端口?
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (+3)1.3敏捷宣言与敏捷过程的特点
  • (06)Hive——正则表达式
  • (9)STL算法之逆转旋转
  • (C语言)输入一个序列,判断是否为奇偶交叉数
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (一)u-boot-nand.bin的下载
  • (转)项目管理杂谈-我所期望的新人
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET DataGridView数据绑定说明
  • .net FrameWork简介,数组,枚举
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET企业级应用架构设计系列之技术选型