• 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)

     

  • 相关阅读:
    【转】属性与字段的区别
    学习C/C++的经验谈(转)
    [C++语法] 关键字typedef用法(转)
    让我们习惯在底层用C++宏生成代码 (转)
    C/C++笔试题 (二)【转】
    C/C++笔试题 (三)【转】
    C语言 printf格式控制符 完全解析
    C/C++笔试题 (一)【转】
    C++内存管理详解(转)
    【转】 Source Insight设置
  • 原文地址:https://www.cnblogs.com/haosola/p/3263885.html
Copyright © 2020-2023  润新知