将Oracle序列增加一定量
发布时间:2020-12-12 13:15:36 所属栏目:百科 来源:网络整理
导读:我正在编写一个 Windows应用程序(在Qt 4.6中) – 在某些时候 – 将1到76000之间的任意数量的数据集插入到某个oracle(10.2)表中.应用程序必须从序列中检索主键或至少主键范围.然后,它将ID存储在列表中,该列表用于批处理执行准备好的查询. (注意:不应使用触发
我正在编写一个
Windows应用程序(在Qt 4.6中) – 在某些时候 – 将1到76000之间的任意数量的数据集插入到某个oracle(10.2)表中.应用程序必须从序列中检索主键或至少主键范围.然后,它将ID存储在列表中,该列表用于批处理执行准备好的查询.
(注意:不应使用触发器,序列也由其他任务使用) 为了避免调用序列X次,我想用X递增序列. 到目前为止我发现的是,在程序中可以使用以下代码: ALTER SEQUENCE my_sequence INCREMENT BY X; SELECT my_sequence.CURVAL + 1,my_sequence.NEXTVAL INTO v_first_number,v_last_number FROM dual; ALTER SEQUENCE my_sequence INCREMENT BY 1; 我有两个主要问题: >我已经读过ALTER SEQUENCE产生一个隐式提交.这是否意味着Windows应用程序启动的事务将被提交?如果是这样,你能以某种方式避免它吗? Sequence is at 10,000 Session A sets increment to 2,000 Session A selects 10,001 as first and 12,000 as last Session B sets increment to 5,000 Session A sets increment to 1 Session B selects 12,001 as last Session B sets increment to 1 即使程序相当快,在我的应用程序中也不太可能两个不同的用户几乎同时调用该过程 解决方法在这种情况下改变序列是非常糟糕的主意.特别是在多用户环境中.您将提交您的事务,可能还有几个“竞争条件”数据错误或完整性错误.如果您已导入旧数据并且希望使用序列中的ID插入新数据,那将是合适的.然后你可以改变序列以将currval移动到max existing … 在我看来,你想在这里生成序列中的ID.这不需要做 select seq.nextval into l_variable from dual; insert into table (id,...) values (l_variable,....); 您可以直接在插入中使用序列: insert into table values (id,...) values (seq.nextval,....); 并可选择获取指定的值 insert into table values (id,....) returning id into l_variable; 即使是使用execBatch进行批量操作也是可能的.要么只是创建ID,要么甚至返回它们.我不确定java中的正确语法,但它将是关于行的东西 insert into table values (id,....) returning id bulk collect into l_cursor; 并且您将获得一个ResultSet来浏览分配的数字. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |