Chinaunix首页 | 论坛 | 博客
  • 博客访问: 701367
  • 博文数量: 158
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 1643
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-11 14:37
个人简介

人法地,地法天,天法道,道法自然

文章分类

全部博文(158)

文章存档

2022年(1)

2020年(3)

2016年(1)

2014年(7)

2013年(4)

2010年(5)

2009年(86)

2008年(25)

2007年(26)

我的朋友

分类: Mysql/postgreSQL

2009-12-15 21:51:12

一般处理方式:
 
DELIMITER $$
DROP PROCEDURE IF EXISTS `studb`.`numbw_query` $$
CREATE PROCEDURE `studb`.`numbw_query` (in wk int)
BEGIN
 
   declare sCount int default 0;
   declare sMax int default 0;
 
   select max(numbb) into sMax from numbe where weekd=wk;
  
  --取最大的那个序号,可能存在为空的情况,
 
   set sCount = 1 + sMax ;
  
  --当sMax为null时,上面那句没作相加,也就是sCount<>1,仍然为0
   select * from numbw where numbb=sCount;

END $$
DELIMITER ;
 
 
后来改进处理方式:
 
DELIMITER $$
DROP PROCEDURE IF EXISTS `studb`.`numbw_query` $$
CREATE PROCEDURE `studb`.`numbw_query` (in wk int)
BEGIN
 
   declare sCount int default 0;
   declare sMax int default 0;
 
   select count(numbb) into sCount from numbe where weekd=wk;
 
   --先判断是否存在数据
 
   if sCount =0  then
      set SCount = 1;
   else
      select max(numbb) into sMax from numbe where weekd=wk;
     
      set sCount = 1 + sMax ;
       
   end if;
 
   select * from numbw where numbb=sCount;
END $$
DELIMITER ;
 
发现效率不太高;想了几天,没有结果,又想到用游标,但又太复杂;
 
又过了几天,发现可以通过is not null来判断是否为null值;
 
DELIMITER $$
DROP PROCEDURE IF EXISTS `studb`.`numbw_query` $$
CREATE PROCEDURE `studb`.`numbw_query` (in wk int)
BEGIN
 
   declare sCount int default 0;
   declare sMax int default 0;
 
   select max(numbb) into sMax from numbe where weekd=wk;
 
   if sMax is not null then
      set sCount = 1 + sMax ;
   else
      set sCount = 1;
   end if;
   select * from numbw where numbb=sCount;
END $$
DELIMITER ;
 
问题解决了!
 
 
阅读(3969) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~