网站首页
本站精华
免费下载
游客:
注册
|
登录
|
会员
|
搜索
|
帮助
LoveUnix
»
DB2 & Informix
» 大哥们帮小弟看看这个存储过程,急!
‹‹ 上一主题
|
下一主题 ››
14
1/2
1
2
››
投票
交易
悬赏
活动
打印
|
推荐
|
订阅
|
收藏
标题: 大哥们帮小弟看看这个存储过程,急!
xff-7
LU新生
UID 98353
精华 0
积分 6
帖子 12
活跃指数 5
LU金币 17 个
LU金条 0 个
阅读权限 10
注册 2007-11-6
#1
大
中
小
使用道具
发表于 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
版主
UID 9471
精华
15
积分 1403
帖子 2414
活跃指数 187
LU金币 4410 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
#2
大
中
小
使用道具
发表于 2007-12-20 10:41
资料
个人空间
短消息
加为好友
看不出什么问题。只是感觉floor(rand()*62)应换成 int(floor(rand()*62)) 。
我的博客:http://blog.chinaunix.net/index.php?blogId=739欢迎访问,并请多多批评指正。
xff-7
LU新生
UID 98353
精华 0
积分 6
帖子 12
活跃指数 5
LU金币 17 个
LU金条 0 个
阅读权限 10
注册 2007-11-6
#3
大
中
小
使用道具
发表于 2007-12-20 11:52
资料
个人空间
短消息
加为好友
是不是和DB2服务器的操作系统有关系?目前是装在WINDOWS下的。
beginner-bj
版主
UID 9471
精华
15
积分 1403
帖子 2414
活跃指数 187
LU金币 4410 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
#4
大
中
小
使用道具
发表于 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新生
UID 98353
精华 0
积分 6
帖子 12
活跃指数 5
LU金币 17 个
LU金条 0 个
阅读权限 10
注册 2007-11-6
#5
大
中
小
使用道具
发表于 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
版主
UID 9471
精华
15
积分 1403
帖子 2414
活跃指数 187
LU金币 4410 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
#6
大
中
小
使用道具
发表于 2007-12-20 21:24
资料
个人空间
短消息
加为好友
也许rand()跟时间点有关系吧?
我的博客:http://blog.chinaunix.net/index.php?blogId=739欢迎访问,并请多多批评指正。
fck
LU幼天使
UID 87914
精华 0
积分 152
帖子 257
活跃指数 24
LU金币 275 个
LU金条 0 个
阅读权限 20
注册 2007-4-9
#7
大
中
小
使用道具
发表于 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
版主
UID 9471
精华
15
积分 1403
帖子 2414
活跃指数 187
LU金币 4410 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
#8
大
中
小
使用道具
发表于 2007-12-21 18:53
资料
个人空间
短消息
加为好友
楼主的意思好象是:五个窗口同时执行,同一时间五个窗口的rand()是一样的。
我的博客:http://blog.chinaunix.net/index.php?blogId=739欢迎访问,并请多多批评指正。
fck
LU幼天使
UID 87914
精华 0
积分 152
帖子 257
活跃指数 24
LU金币 275 个
LU金条 0 个
阅读权限 20
注册 2007-4-9
#9
大
中
小
使用道具
发表于 2007-12-23 18:25
资料
个人空间
短消息
加为好友
怎样做到同时在5个窗口执行?
我看楼主似乎是按照顺序来执行的,然后每一次的结果5个窗口都一样。
xff-7
LU新生
UID 98353
精华 0
积分 6
帖子 12
活跃指数 5
LU金币 17 个
LU金条 0 个
阅读权限 10
注册 2007-11-6
#10
大
中
小
使用道具
发表于 2007-12-25 15:25
资料
个人空间
短消息
加为好友
[attach]27877[/attach]
如图中所示,在Quest中打开四个窗口。一轮一轮的执行四个窗口,每轮查询的随机结果是一样的。
附件:
您所在的用户组无法下载或查看附件
[广告]
论坛新开
【DB2产品家族】
【投资理财】
【行业应用】
板块
fck
LU幼天使
UID 87914
精华 0
积分 152
帖子 257
活跃指数 24
LU金币 275 个
LU金条 0 个
阅读权限 20
注册 2007-4-9
#11
大
中
小
使用道具
发表于 2007-12-26 14:42
资料
个人空间
短消息
加为好友
每一轮是四个窗口同时执行吗?
[广告]
论坛新开
【DB2产品家族】
【投资理财】
【行业应用】
板块
beginner-bj
版主
UID 9471
精华
15
积分 1403
帖子 2414
活跃指数 187
LU金币 4410 个
LU金条 0 个
阅读权限 210
注册 2004-1-16
#12
大
中
小
使用道具
发表于 2007-12-26 16:50
资料
个人空间
短消息
加为好友
这种问题还是打800吧
我的博客:http://blog.chinaunix.net/index.php?blogId=739欢迎访问,并请多多批评指正。
[广告]
论坛新开
【DB2产品家族】
【投资理财】
【行业应用】
板块
14
1/2
1
2
››
投票
交易
悬赏
活动
LoveUnix
专项技术区
> AIX -IBM UNIX
> 其他UNIX & Linux
> i5 (AS400) & IBM大机
> PC Server & HPC
> 存储设备
> 备份软件
> 网络 & 安全
> 编程开发 & Rational
> DB2 & Informix
> ORACLE等数据库
> 中间件技术
行业综合区
> 职业咨询 前程无忧
> 培训认证 行业入门
> 行业应用 项目实施
> 产品信息 商务交流
> Free download下载
交流灌水区
> 蓝色太平洋
> 墨香雅韵
> 共建家园
> 博客专区
当前时区 GMT+8, 现在时间是 2008-7-25 18:20
乐悠LoveUnix论坛-京ICP备05005823号
Thanks to
Discuz!
© 2001-2007 Power by
LoveUnix.net
Processed in 0.112049 second(s), 6 queries , Gzip enabled
TOP
清除 Cookies
-
联系我们
-
乐悠LoveUnix
-
Archiver
-
WAP
界面风格
----------
Discuz! 5 Default
新DISCUZ风格
控制面板首页
编辑个人资料
积分交易
公众用户组
好友列表
升级个人空间
基本概况
流量统计
客户软件
发帖量记录
论坛排行
主题排行
发帖排行
积分排行
在线时间
管理团队
管理统计