zoukankan      html  css  js  c++  java
  • MySQL存储过程带in和out参数

      MySQL存储过程带in和out参数

      最简单的例子:

      [html]

      mysql> DELIMITER $$

      mysql> USE test $$

      Database changed

      mysql> DROP PROCEDURE IF EXISTS `sp_add`$$

      Query OK, 0 rows affected (0.00 sec)

      mysql> CREATE PROCEDURE sp_add(a INT, b INT,OUT c INT)

      -> BEGIN

      -> SET c=a+ b;

      -> END$$

      Query OK, 0 rows affected (0.00 sec)

      mysql> DELIMITER ;

      [html]

      mysql> CALL sp_add (1,2,@c);

      Query OK, 0 rows affected (0.00 sec)</p><p>mysql> SELECT @c;

      +------+

      | @c |

      +------+

      | 3 |

      +------+

      1 row in set (0.00 sec)

      一个稍微复杂的例子:

      [html]

      mysql> show create table t_BillNo;

      +----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

      | Table | Create Table |

      +----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

      | t_BillNo | CREATE TABLE `t_billno` (

      `SaleNo` bigint(20) DEFAULT NULL,

      `bmh` varchar(20) DEFAULT NULL

      ) ENGINE=InnoDB DEFAULT CHARSET=utf8 CHECKSUM=1 DELAY_KEY_WRITE=1 ROW_FORMAT=DYNAMIC | www.sd-ju.com

      +----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

      1 row in set (0.00 sec)

      mysql> select * from t_BillNo;

      +--------+------+

      | SaleNo | bmh |

      +--------+------+

      | 1 | 2 |

      | 4 | 3 |

      | 4 | 5 |

      | 7 | 7 |

      | 12 | 8 |

      +--------+------+

      5 rows in set (0.00 sec)

      mysql>

      mysql> DELIMITER $$

      mysql> USE test $$

      Database changed

      mysql> DROP PROCEDURE IF EXISTS `sp_GetMaxNumber`$$

      Query OK, 0 rows affected (0.01 sec)

      DELIMITER $$

      USE test $$

      DROP PROCEDURE IF EXISTS `sp_GetMaxNumber`$$

      CREATE PROCEDURE sp_GetMaxNumber (IN v_bmh VARCHAR(6), OUT v_MaxNo INT)

      BEGIN

      START TRANSACTION;

      UPDATE t_BillNo

      SET SaleNo = IFNULL(SaleNo,0)+1

      WHERE bmh = v_bmh;

      IF @@error_count = 0 THEN

      BEGIN

      SELECT Saleno INTO v_MaxNo FROM t_BillNo WHERE bmh = v_bmh;

      COMMIT;

      END;

      ELSE

      BEGIN

      ROLLBACK;

      SET v_MaxNo = 0;

      END;

      END IF;

      END$$

      DELIMITER ;

      mysql> CREATE PROCEDURE sp_GetMaxNumber (IN v_bmh VARCHAR(6), OUT v_MaxNo INT)

      -> BEGIN

      -> START TRANSACTION;

      -> UPDATE t_BillNo

      -> SET SaleNo = IFNULL(SaleNo,0)+1

      -> WHERE bmh = v_bmh;

      -> IF @@error_count = 0 THEN

      -> BEGIN

      -> SELECT Saleno INTO v_MaxNo FROM t_BillNo WHERE bmh = v_bmh; www.js-yg.com

      -> COMMIT;

      -> END;

      -> ELSE

      -> BEGIN

      -> ROLLBACK;

      -> SET v_MaxNo = 0;

      -> END;

      -> END IF;

      -> END$$

      Query OK, 0 rows affected (0.00 sec)

      mysql> DELIMITER ;

      mysql>

      mysql> call sp_GetMaxNumber(8,@v_MaxNo);

      Query OK, 0 rows affected (0.00 sec)

      mysql> select @v_MaxNo;

      +----------+

      | @v_MaxNo |

      +----------+

      | 12 |

      +----------+

      1 row in set (0.00 sec)

     

  • 相关阅读:
    【大数据学习与分享】技术干货合集
    K8S集群搭建
    字节跳动面试难吗,应该如何应对?(含内推方式)
    我的新书《C++服务器开发精髓》终于出版啦
    同事内推的那位Linux C/C++后端开发同学面试没过......
    死磕hyperledger fabric源码|Order节点概述
    死磕以太坊源码分析之EVM如何调用ABI编码的外部方法
    死磕以太坊源码分析之EVM动态数据类型
    死磕以太坊源码分析之EVM固定长度数据类型表示
    死磕以太坊源码分析之EVM指令集
  • 原文地址:https://www.cnblogs.com/haosola/p/3263885.html
Copyright © 2011-2022 走看看