容我说几句题外话:我的工作日常是用微软系的,SQL SERVICE 存储过程很强大,我也很习惯很喜欢用存储过程.和MySQL结缘,是在五年前,因为一些原因,公司要求用开源免费的数据库.很多时候,用mysql的程序员是不会去用存储过程的,除了调试麻烦外,还有其它各种小问题.说实在的,MySQL这些年发展很快,但和SQL SERVICE的差距还是很大的.好了,不说废话了,言归正转. 首先,描述我的场景 假如,我们有一张订单表 t_order 结构如下: 字段名 类型 描述 id int(11) <a…
通过 call  proc(0.2,0.5);  查看结果数据库竟然是0  和 1 原因:proc的参数没有设置好 参数:原本是  in a decimal,in b decimal 应该改为:in a decimal(10,2),in b decimal(10,2)   --  长度为10,2位小数…
MYSQL存储过程中的IN.OUT和INOUT,不能简单理解为一个方法的参数和返回值,而是面向整个过程上下文变量的. 一.MySQL 存储过程参数(in) 基本可以理解为传入function的参数,而如果该参数是个变量,那么整个procedure过程结束后,不会影响外部的变量值. 可以直接这样: call abc(’a'); 这种情况直接给in类型的参数赋值. 针对上下文的情况: set @a=’aa’; 给一个变量赋值 call abc(@a); 这里@a作为一个in类型的参数传给abc 不管…
MySQL  存储过程返回多个值   在本教程中,您将学习如何编写/开发返回多个值的存储过程. MySQL存储函数只返回一个值.要开发返回多个值的存储过程,需要使用带有INOUT或OUT参数的存储过程. 返回多个值的存储过程示例 我们看看 orderinfo 表 表中数据 以下存储过程接受点买家姓名,并返回各个状态的订单总数. -- 手动创建存储过程 CheckOrderStatus use test; DROP PROCEDURE IF EXISTS CountOrderByStatus; D…
Mysql 存储过程中使用多游标 drop procedure IF EXISTS test_proc_1; create procedure test_proc_1() begin ; ) ; ) DEFAULT NULL; ) DEFAULT NULL; DECLARE cur_1 CURSOR FOR select name, password from netingcn_proc_test; DECLARE cur_2 CURSOR FOR select id, name from ne…
使用SELECT …INTO语句为变量赋值 在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量.SELECT …INTO语句的语法格式如下: SELECT col_name[,...] INTO var_name[,...] table_expr col_name:要从数据库中查询的列字段名: var_name:变量名,列字段名按照在列清单和变量清单中的位置对应,将查询得到的值赋给对应位置的变量: table_expr:…
MySQL存储过程中使用动态行转列 最近做项目关于数据报表处理,然而数据库存储格式和报表展现形式不同,需要进行一下行转列的操作,在做上一个项目的时候也看了一下,但是后来换了读取方式,也就没深入研究这个问题了. 而这一次必须要直面这个问题了,奈何我是那么的不想看,可项目不能因为这个问题卡在这,只好好好找资料看如何解决这个问题. 开始也在网上找到一些MySQL行转列的例子,但大部分都是静态的,要么就是不知所云,说的不是很清楚.后来就找到国外的一个资料,参考了之后对照自己项目的数据库,然后便成功的实现…
mysql存储过程中,定义变量有两种方式:1.使用set或select直接赋值,变量名以 @ 开头.例如:set @var=1;可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量. 2.以 DECLARE 关键字声明的变量,只能在存储过程中使用,称为存储过程变量,例如:DECLARE var1  INT DEFAULT 0;  主要用在存储过程中,或者是给存储传参数中. 两者的区别是:在调用存储过程时,以DECLARE声明的变量都会被初始化为 NULL.而会话变量(即@开头的变量)则不…
在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了. 这几个循环语句的格式如下: WHILE……DO……END WHILE REPEAT……UNTIL END REPEAT LOOP……END LOOP GOTO 下面首先使用第一种循环编写一个例子. mysql> create procedure pro10() -> begin ->…
MYSQL存储过程中常使用的命令记录 1.触发器trigger 查看:show triggers; 2.存储过程procedure 查看:show procedure status; 查看详细:show create procedure [name] 3.事件调度器event 查看:show events; 查看详细:  show create event [event_name]; 打开关闭mysql时间调度器:SET GLOBAL event_scheduler = ON/OFF或1/0 查…