标题: 大哥们帮小弟看看这个存储过程,急!
xff-7
LU新生
Rank: 1



UID 98353
精华 0
积分 6
帖子 12
活跃指数 5
LU金币 17 个
LU金条 0 个
阅读权限 10
注册 2007-11-6
 
发表于 2007-12-19 10:42  资料  个人空间  短消息  加为好友 
大哥们帮小弟看看这个存储过程,急!

存储过程产生随即字符串
第一次产生10000个随机字符串,但是第二次再产生10000个随机字符串竟然和第一次的10000个一模一样,百思不得其解 !望哪位高人指点一下。代码如下:

CREATE PROCEDURE "ISMCDB"."PRODUCE_BS"
(IN "HEAD_BS" VARCHAR(8),
  OUT "V_BS" VARCHAR(16)
)
  SPECIFIC "ISMCDB"."SQL071217125401074"
  LANGUAGE SQL
  NOT DETERMINISTIC
  CALLED ON NULL INPUT
  MODIFIES SQL DATA
  INHERIT SPECIAL REGISTERS
  BEGIN

declare v_tail_bs varchar(8);
declare random varchar(100);
declare v_count integer default 6;  
declare v_for_count integer default 0;
declare v_random_count integer;
declare v_year varchar(2);

set v_year=substr(ora.to_char(current timestamp,'yyyy'),3,2);
set v_tail_bs=v_year;
set random='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

LOOP_LABEL:  
LOOP
IF v_for_count=v_count THEN
LEAVE LOOP_LABEL;
END IF;

select floor(rand()*62) into v_random_count from langinfo;
IF v_random_count>0 THEN
set v_tail_bs=v_tail_bs||substr(random,v_random_count,1);
set v_for_count=v_for_count+1;
END IF;

IF v_for_count<v_count THEN
ITERATE LOOP_LABEL;
commit;
END IF;

END LOOP LOOP_LABEL;

set v_bs=head_bs||v_tail_bs;

end;

顶部
beginner-bj
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 9471
精华 15
积分 1369
帖子 2357
活跃指数 186
LU金币 4352 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
 
发表于 2007-12-20 10:41  资料  个人空间  短消息  加为好友 
看不出什么问题。只是感觉floor(rand()*62)应换成 int(floor(rand()*62)) 。





我的博客:http://blog.chinaunix.net/index.php?blogId=739欢迎访问,并请多多批评指正。
顶部
xff-7
LU新生
Rank: 1



UID 98353
精华 0
积分 6
帖子 12
活跃指数 5
LU金币 17 个
LU金条 0 个
阅读权限 10
注册 2007-11-6
 
发表于 2007-12-20 11:52  资料  个人空间  短消息  加为好友 
是不是和DB2服务器的操作系统有关系?目前是装在WINDOWS下的。

顶部
beginner-bj
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 9471
精华 15
积分 1369
帖子 2357
活跃指数 186
LU金币 4352 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
 
发表于 2007-12-20 12:37  资料  个人空间  短消息  加为好友 
我的机器上很正常。也是WINDOWS。
db2 => CALL "ISMCDB"."PRODUCE_BS" ('SS',?)@

  输出参数的值
  --------------------------
  参数名: V_BS
  参数值: SS07aNzskS

  返回状态 = 0

db2 => CALL "ISMCDB"."PRODUCE_BS" ('SS',?)@

  输出参数的值
  --------------------------
  参数名: V_BS
  参数值: SS07OJ9QHu

  返回状态 = 0

db2 => CALL "ISMCDB"."PRODUCE_BS" ('SS',?)@

  输出参数的值
  --------------------------
  参数名: V_BS
  参数值: SS07h4l89Y

  返回状态 = 0

db2 => CALL "ISMCDB"."PRODUCE_BS" ('SS',?)@

  输出参数的值
  --------------------------
  参数名: V_BS
  参数值: SS07q6mvyA

  返回状态 = 0

db2 =>





我的博客:http://blog.chinaunix.net/index.php?blogId=739欢迎访问,并请多多批评指正。
顶部
xff-7
LU新生
Rank: 1



UID 98353
精华 0
积分 6
帖子 12
活跃指数 5
LU金币 17 个
LU金条 0 个
阅读权限 10
注册 2007-11-6
 
发表于 2007-12-20 18:24  资料  个人空间  短消息  加为好友 
楼上的大哥,你打开3-5个SQL窗口,都执行select floor(rand()*62) into v_random_count from sysibm.sysdummy1,依次执行每个窗口的语句。我的执行的结果:
第一次执行5个窗口的语句,结果全为0;
第二次执行5个窗口的语句,结果全为34;
第三次执行5个窗口的语句,结果全为11;
。。。。
郁闷中。。。

顶部
beginner-bj
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 9471
精华 15
积分 1369
帖子 2357
活跃指数 186
LU金币 4352 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
 
发表于 2007-12-20 21:24  资料  个人空间  短消息  加为好友 
也许rand()跟时间点有关系吧?





我的博客:http://blog.chinaunix.net/index.php?blogId=739欢迎访问,并请多多批评指正。
顶部
fck
LU幼天使
Rank: 2



UID 87914
精华 0
积分 152
帖子 257
活跃指数 24
LU金币 275 个
LU金条 0 个
阅读权限 20
注册 2007-4-9
 
发表于 2007-12-21 14:48  资料  个人空间  短消息  加为好友 
我单独执行了好几遍,都不一样啊?(windows)
db2 =>  select float(rand()*62) from sysibm.sysdummy1

1
------------------------
  +5.32544938505203E+001

  1 条记录已选择。

db2 =>  select float(rand()*62) from sysibm.sysdummy1

1
------------------------
  +4.40510879848628E+001

  1 条记录已选择。

db2 =>  select float(rand()*62) from sysibm.sysdummy1

1
------------------------
  +3.18391674550615E+001

  1 条记录已选择。

顶部
beginner-bj
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 9471
精华 15
积分 1369
帖子 2357
活跃指数 186
LU金币 4352 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
 
发表于 2007-12-21 18:53  资料  个人空间  短消息  加为好友 
楼主的意思好象是:五个窗口同时执行,同一时间五个窗口的rand()是一样的。





我的博客:http://blog.chinaunix.net/index.php?blogId=739欢迎访问,并请多多批评指正。
顶部
fck
LU幼天使
Rank: 2



UID 87914
精华 0
积分 152
帖子 257
活跃指数 24
LU金币 275 个
LU金条 0 个
阅读权限 20
注册 2007-4-9
 
发表于 2007-12-23 18:25  资料  个人空间  短消息  加为好友 
怎样做到同时在5个窗口执行?
我看楼主似乎是按照顺序来执行的,然后每一次的结果5个窗口都一样。

顶部
xff-7
LU新生
Rank: 1



UID 98353
精华 0
积分 6
帖子 12
活跃指数 5
LU金币 17 个
LU金条 0 个
阅读权限 10
注册 2007-11-6
 
发表于 2007-12-25 15:25  资料  个人空间  短消息  加为好友 
[attach]27877[/attach]

如图中所示,在Quest中打开四个窗口。一轮一轮的执行四个窗口,每轮查询的随机结果是一样的。



 附件: 您所在的用户组无法下载或查看附件
顶部
[广告] 论坛新开 【DB2产品家族】 【投资理财】 【行业应用】 板块
fck
LU幼天使
Rank: 2



UID 87914
精华 0
积分 152
帖子 257
活跃指数 24
LU金币 275 个
LU金条 0 个
阅读权限 20
注册 2007-4-9
 
发表于 2007-12-26 14:42  资料  个人空间  短消息  加为好友 
每一轮是四个窗口同时执行吗?

顶部
[广告] 论坛新开 【DB2产品家族】 【投资理财】 【行业应用】 板块
beginner-bj
版主
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15


UID 9471
精华 15
积分 1369
帖子 2357
活跃指数 186
LU金币 4352 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
 
发表于 2007-12-26 16:50  资料  个人空间  短消息  加为好友 
这种问题还是打800吧





我的博客:http://blog.chinaunix.net/index.php?blogId=739欢迎访问,并请多多批评指正。
顶部
[广告] 论坛新开 【DB2产品家族】 【投资理财】 【行业应用】 板块
 



当前时区 GMT+8, 现在时间是 2008-7-7 00:40
乐悠LoveUnix论坛-京ICP备05005823号

Thanks to Discuz!  © 2001-2007    Power by LoveUnix.net
Processed in 0.057737 second(s), 6 queries , Gzip enabled

清除 Cookies - 联系我们 - 乐悠LoveUnix - Archiver - WAP