互联网服务触发器

随机函数的问题

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软件开发工程师中国建设银行
IFAQ 里有个配套设置seed
CREATE PROCEDURE sp_setseed(n INTEGER)
        DEFINE GLOBAL seed DECIMAL(10) DEFAULT 1;
        LET seed = n;
END PROCEDURE;

global 值是跟session 的。

A global variable has its value stored in memory and is available to other SPL routines, run by the same user session, on the same database. A global variable has the following characteristics:
It requires a default value.
It can be used in any SPL routine, although it must be defined in each routine in which it is used.
It carries its value from one SPL routine to another until the session ends.
互联网服务 · 2011-03-21
浏览1033

回答者

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

villager 最近回答过的问题

回答状态

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