`

mysql存储过程及调用

阅读更多

mysql存储过程好久没写了都忘记的差不多了,时间久了不写手生现在工作需要写一些也是觉得蛮好玩的,虽然写的不怎么好不怎么高大上,但是感觉很欣慰写多了就熟练一些高级一些吧,花了3,4个小时写的不好请大家多指正,测试过的。在数据库软件Navicat Premium 12中新建存储过程的类型是INOUT类型:

//开始---------------------

CREATE DEFINER=`xxxx`@`%` PROCEDURE `export_seller_amount`(IN `_user_id` int,

OUT totalPayFee decimal(10,2),

OUT personSells decimal(10,2),

OUT selfTotalPayFee decimal(10,2),

OUT selfCommissionAmountTotal decimal(10,2),

OUT teamCommissionAmountTotal decimal(10,2))

BEGIN

 

 

declare totalPayFee decimal(10,2); //定义变量类型

declare personSells decimal(10,2);

declare selfTotalPayFee decimal(10,2);

declare selfCommissionAmountTotal decimal(10,2);

declare teamCommissionAmountTotal decimal(10,2);

 

-- 总销售额 (个人销售额 + 团队销售额)  into赋值

SELECT SUM(b.pay_fee) INTO totalPayFee FROM `wr_fx_aa` `a` INNER JOIN `pay_bb` `b` ON a.serial_id=b.serial_id and b.pay_status=0 INNER JOIN `pay_bb` `c` ON b.serial_id=c.serial_id and c.is_refund=0 WHERE ((`a`.`fx_user_id`=_user_id) AND (`a`.`is_delete`=0)) AND (`b`.`create_time` >= 0) GROUP BY `a`.`fx_user_id`;

 

-- 个人销售额(如xx卖出去 的订单总额)

select sum(pay_fee) INTO personSells from pay_bb where pay_status = 0 and is_fx = 1 and fx_share_from = _user_id;

 

 

-- 收益概况 

-- SELECT  sum(a.pay_fee) as selfTotalPayFee, SUM(c.extract_amount) as selfCommissionAmountTotal, SUM(c.fx_user_amount) as teamCommissionAmountTotal FROM `pay_bb` `a` INNER JOIN `pay_cc` `b` ON a.serial_id=b.serial_id and b.is_refund=0 LEFT JOIN `wr_fx_aa` `c` ON a.serial_id=c.serial_id and c.fx_user_id=_user_id WHERE (`a`.`fx_share_from`=_user_id) AND (`a`.`is_fx`=1) AND (`a`.`pay_status`=0) GROUP BY `a`.`fx_share_from`;

 

SELECT  sum(a.pay_fee) INTO selfTotalPayFee FROM `pay_bb` `a` INNER JOIN `pay_cc` `b` ON a.serial_id=b.serial_id and b.is_refund=0 LEFT JOIN `wr_fx_aa` `c` ON a.serial_id=c.serial_id and c.fx_user_id=_user_id WHERE (`a`.`fx_share_from`=_user_id) AND (`a`.`is_fx`=1) AND (`a`.`pay_status`=0) GROUP BY `a`.`fx_share_from`;

 

SELECT  SUM(c.extract_amount) INTO selfCommissionAmountTotal FROM `pay_bb` `a` INNER JOIN `pay_cc` `b` ON a.serial_id=b.serial_id and b.is_refund=0 LEFT JOIN `wr_fx_aa` `c` ON a.serial_id=c.serial_id and c.fx_user_id=_user_id WHERE (`a`.`fx_share_from`=_user_id) AND (`a`.`is_fx`=1) AND (`a`.`pay_status`=0) GROUP BY `a`.`fx_share_from`;

 

SELECT SUM(c.fx_user_amount) INTO teamCommissionAmountTotal FROM `pay_bb` `a` INNER JOIN `pay_cc` `b` ON a.serial_id=b.serial_id and b.is_refund=0 LEFT JOIN `wr_fx_aa` `c` ON a.serial_id=c.serial_id and c.fx_user_id=_user_id WHERE (`a`.`fx_share_from`=_user_id) AND (`a`.`is_fx`=1) AND (`a`.`pay_status`=0) GROUP BY `a`.`fx_share_from`;

 

set totalPayFee = totalPayFee;

set personSells = personSells;

set selfTotalPayFee = selfTotalPayFee;

set selfCommissionAmountTotal = selfCommissionAmountTotal;

set teamCommissionAmountTotal = teamCommissionAmountTotal;

 

 

 SELECT totalPayFee,personSells,selfTotalPayFee,selfCommissionAmountTotal,teamCommissionAmountTotal;

-- SELECT personSells;

-- SELECT selfTotalPayFee;

-- SELECT selfCommissionAmountTotal;

-- SELECT teamCommissionAmountTotal;

 

 

END





//保存调试,输入参数user_id运行结果看博客的附件图片


 

用php程序如何调取存储过程返回的数据(YII框架):

 $reg = 273948;  //$user['user_id']

 $cmd = \Yii::$app->db->createCommand("call export_seller_amount(:reg,@totalPayFee,@personSells,@selfTotalPayFee,@selfCommissionAmountTotal,@teamCommissionAmountTotal)");

   $cmd->bindParam(':reg',$reg,\PDO::PARAM_STR,50);

   $data = $cmd->queryOne();


 打印输出结果:

C:\wamp\www\rainbowAdmin\backend\controllers\FxDistributorController.php:495:

array (size=5)

  'totalPayFee' => string '74528.7' (length=6)

  'personSells' => string '72929.93' (length=5)

  'selfTotalPayFee' => string '72929.93' (length=5)

  'selfCommissionAmountTotal' => string '3521.12' (length=4)

  'teamCommissionAmountTotal' => string '410.59' (length=4)

 

 //初步测试 使用存储过程 消耗时间是php读取数据表消耗时间的40%左右,效率还是不错的毕竟mysql是功能齐全数据库引擎机器并且少了来回请求数据的过程时间,初步这么写等一下还要去优化一下

 

 

 

  • 大小: 8 KB
分享到:
评论

相关推荐

    Java实现调用MySQL存储过程详解

    总的来说,Java通过JDBC调用MySQL存储过程涉及到连接数据库、创建`CallableStatement`、执行存储过程和处理结果。这使得开发者能够在Java应用中灵活地利用数据库提供的强大功能,实现更高效的数据处理。

    MySql 分页存储过程以及代码调用

    本篇文章将深入探讨MySQL中的分页存储过程及其代码调用方法。 首先,理解分页的基本概念。在网页或应用程序中,我们通常会看到“上一页”、“下一页”这样的导航,这就是分页的表现形式。分页查询通过设置每页显示...

    Java调用Mysql存储过程

    在Java编程中,调用MySQL存储过程是一种常见的数据库交互方式,尤其在处理复杂业务逻辑或大量数据操作时。本文将详细讲解如何通过Java来执行MySQL的存储过程。 首先,了解存储过程的基本概念。存储过程是预编译在...

    c++实现调mysql存储过程

    c++实现调mysql存储过程,实现存储过程的出参入参,可以支持查询多数据返回,还有存储过程的复杂数据的增删改等

    mySQL存储过程调用

    根据给定的文件信息,我们将深入探讨如何在PHP中调用MySQL存储过程,这一知识点对于理解数据库自动化任务、提高数据处理效率以及增强代码的可维护性和安全性具有重要意义。 ### MySQL存储过程 存储过程是一种在...

    mysql存储过程教程

    本教程将深入探讨MySQL存储过程的创建、调用以及相关概念。 一、存储过程的基本概念 存储过程是由一个或多个SQL语句组成的集合,存储在数据库中,可以像函数一样被调用执行。它们可以接受参数,返回结果,并且能够...

    pb使用odbc调用mysql存储过程的例子.txt

    给了一个小的mysql 存储过程的例子。同时给出了一个在pb9中调用的例子.本例子是给出的mysql8.0的存储过程。对于5.7一下的现在odbc很难有支持

    mysql调用存储过程

    MySQL存储过程是数据库管理系统中一组为了完成特定功能的SQL语句集,它可以被命名、保存并在需要时调用,极大地提高了数据库开发效率和程序的可维护性。在Java应用程序中,我们经常使用JDBC(Java Database ...

    php中调用MySQL存储过程

    ### PHP中调用MySQL存储过程 #### 背景与目的 在Web开发中,PHP是一种广泛使用的服务器端脚本语言,它与MySQL数据库结合得非常紧密,为开发者提供了强大的功能来处理数据。存储过程是预编译好的SQL代码块,它们...

    spring mvc + mybatis 调用mysql 存储过程

    本文将详细讲解如何在Spring MVC和MyBatis集成的项目中调用MySQL存储过程。 首先,让我们理解存储过程的概念。存储过程是在数据库中预编译的一组SQL语句,可以包含输入、输出和内部参数,能够执行复杂的业务逻辑。...

    MySQL存储过程的异常处理方法

    本实例展示了如何在MySQL存储过程中实现异常处理,以捕获并处理可能出现的错误。 首先,我们注意到在创建存储过程`myProc`时,使用了`delimiter $$`来改变MySQL客户端的语句分隔符,这是为了在存储过程中使用多个...

    MyBatis调用MYSQL存储过程

    MyBatis调用MYSQL存储过程 返回多行 引用的包: asm-3.1.jar cglib-2.2.jar commons-logging-1.1.1.jar log4j-1.2.13.jar mybatis-3.0.4.jar mysql-connector-java-5.1.13.jar slf4j-api-1.5.8.jar slf4j-log4j12-...

    mysql经典教程+mysql存储过程讲解

    本教程结合"mysql经典教程+mysql存储过程讲解"的主题,将深入探讨MySQL的基础知识以及核心特性——存储过程。 首先,我们需要理解什么是数据库。数据库是一个组织和存储数据的系统,允许用户以结构化方式访问和管理...

    Java调用数据库存储过程[mysql测试通过]

    以下是一个简单的Java调用MySQL存储过程的示例: ```java import java.sql.*; public class TestJavaProcedure { public static void main(String[] args) { String url = "jdbc:mysql://localhost:3306/mydb"; ...

    MySQL存储过程学习

    在这个"MySQL存储过程学习"的主题中,我们将深入探讨存储过程的定义、创建、调用以及其在数据库管理中的实际应用。 首先,理解存储过程的基本概念是至关重要的。存储过程是一组为了完成特定功能的SQL语句集合,这些...

    c API 调用mysql存储过程完成增删改查

    在本例中,我们关注的是如何使用C API来调用MySQL数据库中的存储过程,以实现对数据的增、删、改、查(CRUD)操作。MySQL是一个广泛使用的开源关系型数据库管理系统,它提供了丰富的API供开发者使用。 首先,要使用...

    mybatis调用mysql存储过程

    通过以上步骤,你已经掌握了如何在MyBatis中调用MySQL存储过程的基本方法。在实际开发中,这将极大地提升你的数据库操作效率,使你能够更好地管理和处理复杂的业务逻辑。在后续的实践中,你可以尝试结合具体业务场景...

    MySQL 存储过程入门到精通

    在这个“MySQL存储过程入门到精通”资料中,你将深入理解存储过程的原理、创建、调用以及优化方法。 一、存储过程的基本概念 存储过程是由一系列SQL语句组成的程序,存储在数据库服务器上,可以被多次调用执行,...

    mysql存储过程调试工具

    MySQL存储过程是数据库管理系统中的一种重要功能,它允许开发者编写一系列复杂的SQL语句,并作为一个单元进行执行,提高代码复用性和效率。然而,与普通的编程语言一样,存储过程的调试同样至关重要,因为错误的存储...

Global site tag (gtag.js) - Google Analytics