我似乎无法找到有关创建序列的任何信息 .
如果存在现有数据库且表PEOPLE具有主键SIN,如果我想生成主键 . 鉴于主键是RANDOM,我该怎么做呢?基本上我认为如果我只需计算行数并将其设置为我的创建序列中的最小值,这将很容易 . 但是,鉴于表中的主键是随机的,我将如何实现创建序列?如果我只想添加新的主键,其值从先前插入的值开始递增 .
或者为我自动创建序列检查?
据我所知,你需要立即执行 .
declare n integer; begin select max(sin) + 1 into n from people; execute immediate 'create sequence my_seq start with ' || n ||' increment by 1'; end;
编辑:我认为这个问题是创建一个在给定现有随机记录的情况下是唯一的序列 . 正如塞德里克所说,我不明白让主键随机的原因 .
我找到了以下工作 . 关键是要生成整个序列,排除现有的主键,最后从左边的内容中选择一个随机值 . 此外,您必须将其打包到“BEFORE INSERT”触发器中 .
select rn from ( select row_number() over (order by dbms_random.random) as mx, rn from ( select rownum as rn from dual connect by rownum <= 10 minus ( select SIN from people ) ) ) where mx = 1 ;
2 回答
据我所知,你需要立即执行 .
编辑:我认为这个问题是创建一个在给定现有随机记录的情况下是唯一的序列 . 正如塞德里克所说,我不明白让主键随机的原因 .
我找到了以下工作 . 关键是要生成整个序列,排除现有的主键,最后从左边的内容中选择一个随机值 . 此外,您必须将其打包到“BEFORE INSERT”触发器中 .