首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Flame Robin使用增量数据填充Firebird列

使用Flame Robin使用增量数据填充Firebird列
EN

Stack Overflow用户
提问于 2017-06-29 19:42:14
回答 1查看 418关注 0票数 1

我有一个巨大的Firebird数据库,其中有一个表,其中有4100万行数据。最近,我添加了一个新的浮点列,并希望用增量数据填充它。每个下一个值都应该是由RAND()递增的前一个值。第一个值也是RAND()

该怎么做呢?

查询

代码语言:javascript
复制
SELECT ID FROM MY_TABLE WHERE MY_COLUMN IS NULL ROWS 1;

最多需要15秒,所以我不会指望这个查询会在循环中执行。

该表有一个索引ID列,它是复合主键的一部分。

EN

回答 1

Stack Overflow用户

发布于 2017-06-29 20:24:45

就像这样

代码语言:javascript
复制
 update MyTable set MyColumn = Gen_ID( TempGen, 
     round( rand() * 100000) ) / 100000.0

  1. 创建临时生成器-将整数生成器删除为浮点值,并按某个系数进行缩放,如100 000表示1.0,10 000表示0.1等
  2. 使用GEN_ID函数将生成器转发到指定数量的整数单位
  3. drop the generator

或者使用存储过程或执行块

就像这样

代码语言:javascript
复制
execute block
as
declare f double precision = 0;
declare i int;
begin
  for select ID FROM MY_TABLE WHERE MY_COLUMN IS NULL order by id into :I
   do begin
    f = f + rand();
    update MY_TABLE SET MY_COLUMN = :f where ID = :i;
  end;
end

或者您可以尝试使用游标,但我没有尝试,所以我不确定它是如何工作的。

https://www.firebirdsql.org/refdocs/langrefupd25-psql-forselect.html

代码语言:javascript
复制
execute block
as
declare f double precision = 0;
begin
  for select ID FROM MY_TABLE WHERE MY_COLUMN IS NULL order by id 
  as cursor C do begin
    f = f + rand();
    update MY_TABLE SET MY_COLUMN = :f where current of C;
  end;
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44824177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档