我的应用程序需要知道哪个行接收数据库中的哪个密钥。Oracle 11g JDBC预取密钥
我正在使用JDBC读取批量更新提交的隔离级别。因此使用getGeneratedKeys检索密钥是不可能的。我的计划是以安全的交易方式从数据库中获取一系列ID,例如两个并行事务不能获得相同的密钥。
我可以使用未来行数作为参数来编写一些SQL查询以获取Oracle 11g中未来密钥的列表吗?
我在这里有什么选择?
我的应用程序需要知道哪个行接收数据库中的哪个密钥。Oracle 11g JDBC预取密钥
我正在使用JDBC读取批量更新提交的隔离级别。因此使用getGeneratedKeys检索密钥是不可能的。我的计划是以安全的交易方式从数据库中获取一系列ID,例如两个并行事务不能获得相同的密钥。
我可以使用未来行数作为参数来编写一些SQL查询以获取Oracle 11g中未来密钥的列表吗?
我在这里有什么选择?
您可以使用序列用于此目的:
create sequence s;
检索ID
select s.nextval from dual;
或检索ID的范围:
select s.nextval from dual connect by level <= 10;
只想补充:
有n o序列和表之间的明确关系。一个序列只是一个产生数字序列的机制。你可以假设一个序列永远不会产生重复的值,这就是它。不要假定顺序,并且肯定不指望没有间隙的顺序。在Oracle中按照这种方式完成序列设计。通过遵循这些规则,并且不对序列的行为做出其他假设,我们可以获得具有序列的极高可扩展性。请注意,只要您尝试执行订单或无间隙序列,您的表现就会受到严重影响。
总结: 1.)序列很简单,而且速度非常快。 2.)除了“没有dups”,不要以为你可以预测一个序列的行为。 3.)序列是独立的对象,与表格无关,可用于生成将在同一个表格或许多不同表格中使用的序列值。
希望有所帮助。
谢谢,您能否详细说明此方法的交易安全性?对于所有表格的所有自动递增键,双重魔法池塘? –
如何知道哪张桌子需要钥匙? –
您可以创建尽可能多的序列。每张表有一个序列并不罕见。从dual中选择table1_seq.nextval;从dual中选择table2_seq;等等。 –