mysql 存储过程 例子

CREATE DEFINER=`root`@`%` PROCEDURE `sp_GetWangingsCount`(IN `PCode` VARCHAR(50), IN `FromDay` DATE, IN `Cycle` INT, IN `DayCount` INT, OUT `Rlt` INT, OUT `DayStr` VARCHAR(520))

LANGUAGE SQL

NOT DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT ‘‘

BEGIN

if Date_Add(FromDay, interval DayCount-1 day) < date(now()) then

set Rlt = 0;

else

set @n = floor((datediff(date(now()), FromDay)  + 1) / Cycle);

set Rlt = 0;

set DayStr = ‘‘;

set @i=1;

while @i <= @n do

set @_FromDay = Date_Add(FromDay, interval DayCount/Cycle*(@i-1) - 1 day) ;

if @_FromDay <= date(now()) then

if @i < @n then

set @_ToDay = Date_add(date(FromDay), interval DayCount/Cycle*@i day);

else

set @_ToDay = Date_add(date(Fromday), interval DayCount-1 day);

end if;

if datediff(@_ToDay, now()) > 0 then

set @_ToDay = date(now());

end if;

select @k:=if(sum(sa_money)/datediff(@_ToDay, @_FromDay) < 1000, 1 ,0)

from `t_sale`

where sa_code = PCode and sa_date between @_FromDay and @_ToDay;

set Rlt = Rlt + @k;

select @i, @_FromDay, @_ToDay, @k, Rlt;

if @k = 1 then

if DayStr = ‘‘ then

set DayStr = concat(DayStr,  @_FromDay, ‘-‘,  @_ToDay);

else

set DayStr = concat(DayStr, ‘,‘,  @_FromDay, ‘-‘,  @_ToDay);

end if;

end if;

end if;

set @i = @i + 1;

end while;

end if;

END

CREATE DEFINER=`root`@`%` PROCEDURE `showWarnings`()

LANGUAGE SQL

NOT DETERMINISTIC

CONTAINS SQL

SQL SECURITY DEFINER

COMMENT ‘ShowWarnigsDay‘

BEGIN

-- 遍历数据结束标志

DECLARE done INT DEFAULT FALSE;

declare a_code varchar(50);

declare cur cursor for select * from `t_temp`;

-- 将结束标志绑定到游标

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

create table t_tmp

select

b.ps_name ps_name,

a.p_code p_code,

a.p_name p_name,

a.p_scale p_scale,

(select sum(c.sa_money) from t_sale c where c.sa_code=a.p_code) as sa_money,

p_scale-(select sum(c.sa_money) from t_sale c where c.sa_code=a.p_code) as sa_left,

datediff(p_EndDate,p_BeginDate) as dayLeft,

floor(datediff(a.p_EndDate, a.p_BeginDate)/7) as LeftWeek,

a.p_period p_period,

a.p_BeginDate p_eginDate,

(select sum(c.sa_money) from t_sale c where c.sa_code=a.p_code)/a.p_scale*100 As Percent,

1 as`预警次数` ,

1 as`破线次数` ,

‘2014-08-10‘ as`破线日期` ,

(select w_color from t_warning d where d.w_code=a.p_code) as W_color,

1 as `当日破线`

from t_product a

left join t_product_sort b on a.p_sort=b.ps_id and a.p_sort in (‘1‘,‘2‘);

-- 打开游标

OPEN cur;

-- 开始循环

read_loop: LOOP

-- 提取游标里的数据,这里只有一个,多个的话也一样;

FETCH cur INTO a_code;

-- 声明结束的时候

IF done THEN

LEAVE read_loop;

END IF;

call `spGetWangingsCount`(a_code, ‘‘, ‘‘, ‘‘);

update t_temp set `预警次数`[email protected];

END LOOP;

-- 关闭游标

CLOSE cur;

END

时间: 2024-10-13 23:28:36

mysql 存储过程 例子的相关文章

mysql存储过程例子

/*定义变量方式1:set @变量名=值;方式2:select 值 into @变量名;方式3:declare 变量名 类型(字符串类型加范围) default 值; in参数 入参的值会仅在存储过程中起作用out参数 入参的值会被置为空,存储中计算的值会影响外面引用该变量的值inout参数 入参的值不会被置为空,存储中计算的值会影响外面引用该变量的值*/use mysql;/*创建1个存储过程*/delimiter $$DROP PROCEDURE IF EXISTS porc_person_

MySql存储过程例子1

delimiter // drop procedure if exists p_PreLogin// create procedure p_PreLogin( IN in_username varchar(32), IN in_password varchar(32), IN in_asshkey varchar(33), IN in_usshkey varchar(33), IN in_gameid tinyint, IN in_logintype tinyint ) PROC_LABEL:

MySQL存储过程详解 mysql 存储过程

MySQL存储过程详解  mysql 存储过程 (2010-12-13 10:59:38) 转载▼ 标签: it 分类: mysql mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保

MYSQL存储过程和函数学习笔记

学至Tarena金牌讲师何山,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和函数,可以避免开发人员重复编写相同的SQL语句. MYSQL存储过程和函数是保存在服务器中,在服务器中存储和执行,可以减少客户端和服务器端之间数据传输的消耗. 存储过程就是一组已经保存在数据库中的语句,并且可以随时地调用. 存储过程允许标准组件式编程,存储过程在被创建以后可以在程序中被多次调用而

MySQL存储过程详解 mysql 存储过程(转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html)

转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和

mysql存储过程、存储函数及流程控制

存储过程 一.基本语法 create procedure sp_name([proc_parameter[,...]]) [characteristic...]routine_body begin end sp_name 表示存储过程的名字 proc_parameter 存储过程参数例表[IN OUT INOUT]三个部分组成 其中IN 表示传进来的参数 其中OUT 表示传出去的参数 其中INOUT 表示传进来但最终传回的参数 routine_body 参数是SQL代码的内容(类似于触发器的fo

MySQL存储过程中的3种循环

在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了. 这几个循环语句的格式如下: WHILE……DO……END WHILE REPEAT……UNTIL END REPEAT LOOP……END LOOP GOTO 下面首先使用第一种循环编写一个例子. mysql> create procedure pro10() -> begin ->

mysql存储过程详解

1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以

Mysql存储过程(Java)

这是我学习mysql存储过程时关心的几个点内容,希望能对你们学习存储过程有所帮助. 语法: create procedure sp_name ([proc_parameter[,...]]) [characteristic ...]begin.......end Proc_parameter:存储过程的参数列表,多个参数彼此间用逗号分隔      格式[IN|OUT|INOUT] param_name type IN(输入参数).OUT(输出参数).INOUT(输出参数和输入); Param_n