互联网服务触发器

随机函数的问题

CREATE PROCEDURE sp_random(n integer) RETURNING INTEGER;        DEFINE GLOBAL seed DECIMAL(10) DEFAULT 1;        DEFINE d DECIMAL(20,0);        LET d = (seed * ...显示全部
CREATE PROCEDURE sp_random(n integer) RETURNING INTEGER;
        DEFINE GLOBAL seed DECIMAL(10) DEFAULT 1;
        DEFINE d DECIMAL(20,0);
        LET d = (seed * 1103515245) + 12345;
        LET seed = d - 4294967296 * TRUNC(d / 4294967296);
RETURN MOD(TRUNC(seed / 65536), n);  
END PROCEDURE;

这个随机函数我这样用select sp_random(100) from table,会返回100以内的随机值,可是我每次手工执行的时候都没有问题,定时执行或做成触发器就不行了,返回的总是固定值!怎么回事呢?收起
参与4

查看其它 3 个回答villager的回答

villagervillager软件开发工程师中国建设银行
回复  villager


   没明白什么意思,是不是要再建个sp_setseed函数?
sophy 发表于 2011-3-21 14:19



    把种子放表里。
create table seed   
(
seed decimal(16)     
);
set table seed MEMORY_RESIDENT;         
insert into seed values( 1);

CREATE PROCEDURE sp_random(n integer) RETURNING INTEGER;
        DEFINE vseed like  seed.seed;
        DEFINE d DECIMAL(20,0);
        select seed into vseed from seed;
        LET d = (vseed * 1103515245) + 12345;
        LET vseed = d - 4294967296 * TRUNC(d / 4294967296);
        update seed set seed=vseed;
RETURN MOD(TRUNC(vseed / 65536), n);
END PROCEDURE;
互联网服务 · 2011-03-25
浏览1128

回答者

villager
软件开发工程师中国建设银行

villager 最近回答过的问题

回答状态

  • 发布时间:2011-03-25
  • 关注会员:0 人
  • 回答浏览:1128
  • X社区推广