楼主: myfend

存储过程中怎么使用row_count?

[复制链接]
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
21#
发表于 2008-1-9 12:10 | 只看该作者
我看了一下,你那个tt是临时表,自然是不能reopen了
和你的版本无关

而且你的循环似乎是个死循环

你的代码似乎没啥实际意义
把数据插入到临时表,又删除了临时表

总之,临时表是不能reopen的,

[ 本帖最后由 atgc 于 2008-1-9 12:17 编辑 ]

使用道具 举报

回复
论坛徽章:
0
22#
 楼主| 发表于 2008-1-9 12:17 | 只看该作者
to atgc:
应该怎么解决呢?

使用道具 举报

回复
论坛徽章:
0
23#
 楼主| 发表于 2008-1-9 12:18 | 只看该作者
应该不是死循环..
我在sqlserver里执行成功的.

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
24#
发表于 2008-1-9 12:21 | 只看该作者
原帖由 myfend 于 2008-1-9 12:17 发表
to atgc:
应该怎么解决呢?

不太清楚你的需求,你可以用两张临时表,或者说说你的需求

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
25#
发表于 2008-1-9 12:21 | 只看该作者
原帖由 myfend 于 2008-1-9 12:18 发表
应该不是死循环..
我在sqlserver里执行成功的.


到底是SQLSERVER还是mysql?

使用道具 举报

回复
论坛徽章:
0
26#
 楼主| 发表于 2008-1-9 12:27 | 只看该作者
我是在sqlserver里写成功了..
现在改写为mysql
就一直不成功..

使用道具 举报

回复
论坛徽章:
0
27#
 楼主| 发表于 2008-1-9 12:28 | 只看该作者
我的需求..顶楼都说了啊.

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
28#
发表于 2008-1-9 12:31 | 只看该作者
原帖由 myfend 于 2008-1-9 12:27 发表
我是在sqlserver里写成功了..
现在改写为mysql
就一直不成功..

不同的数据库,不是说sqlserver能成功,mysql就一定能成功的

使用道具 举报

回复
论坛徽章:
115
生肖徽章:狗
日期:2007-01-06 21:14:12马上有车
日期:2014-03-06 16:45:08马上加薪
日期:2014-05-09 12:27:582014年世界杯参赛球队: 英格兰
日期:2014-07-03 13:10:44青年奥林匹克运动会-竞技体操
日期:2014-09-10 15:30:57马上有钱
日期:2014-10-31 13:56:48美羊羊
日期:2015-03-04 14:48:582015年新春福章
日期:2015-03-06 11:57:31懒羊羊
日期:2015-04-23 19:26:10金牛座
日期:2015-09-17 08:21:44
29#
发表于 2008-1-9 12:32 | 只看该作者
原帖由 myfend 于 2008-1-9 12:28 发表
我的需求..顶楼都说了啊.


不明白,也不知道啥 BOM

使用道具 举报

回复
论坛徽章:
0
30#
 楼主| 发表于 2008-1-9 13:01 | 只看该作者
感谢各位关注..
终于成功了..按你们说的.使用两个临时表.

SP代码如下:
DELIMITER $$

DROP PROCEDURE IF EXISTS `tennis`.`sp_tree_test` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_tree_test`(in parent_id int)
begin
    declare level smallint default 0;
    declare cnt int default 0;
    create temporary table tt(ProdCateID int,ProdCateName varchar(20),
                              ParentCateID int,level smallint,sort varchar(1000));
    create temporary table tt2(ProdCateID int,ProdCateName varchar(20),
                              ParentCateID int,level smallint,sort varchar(1000));

    insert into tt select ProdCateID,ProdCateName,
                          ParentCateID,level,cast(ProdCateID as char)
                   from tb_test
                   where ParentCateID=parent_id;

    select row_count() into cnt;
    insert into tt2 select * from tt;

    while cnt>0 do
        set level=level+1;
        truncate table tt;
        insert into tt select a.ProdCateID,a.ProdCateName,
                              a.ParentCateID,level,concat(b.sort,a.ProdCateID)
                       from tb_test a,tt2 b
                       where a.ParentCateID=b.ProdCateID and b.level=level-1;
        select row_count() into cnt;
        insert into tt2 select * from tt;
    end while;
    select ProdCateID,
           concat(space(a.level*2),'|--',a.ProdCateName) ProdCateName
    from tt2 a
    order by sort;

    drop table tt;
    drop table tt2;
end $$

DELIMITER ;

##执行

mysql> call sp_tree_test(0);
+------------+-----------------+
| ProdCateID | ProdCateName    |
+------------+-----------------+
|          1 | |--服装            |
|          3 |   |--内衣           |
|          7 |     |--内裤        |
|          8 |     |--文胸         |
|          4 |   |--外套           |
|         10 |     |--女大衣        |
|          9 |     |--男外套         |
|          2 | |--箱包             |
|          5 |   |--男箱包           |
|         11 |     |--男用钱包        |
|          6 |   |--女箱包          |
|         12 |     |--女用钱包       |
+------------+-----------------+
12 rows in set (0.30 sec)

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表