我试图查看是否存在某些东西来创建一个具有分区逻辑的序列。 我需要依赖于其他主键的前一个序列号:Oracle分区序列
id_person sequence id
1 | 1
1 | 2
2 | 1
3 | 1
1 | 3
这样的顺序必须依靠id_person
分区。在oracle上是否有这样的东西,或者我必须在应用程序级别自己实现它?
谢谢。
嗨具有建立这个PLSQL包一个函数和过程:
PROCEDURE INIT_SEQUENCE(NAME varchar2, pkColumnNameList PARTITIONED_SEQUENCE_PK_COLUMN);
FUNCTION GET_NEXT_SEQUENCE_VALUE(NAME varchar2, pkPartitionColValue PARTITIONED_SEQUENCE_COL_VALUE) RETURN NUMBER;
INIT_SEQUENCE - 获得输入的序列关联的名称和列名的列表,被固定的主键的一部分该序列例如:'ID_PERSON'
该过程的工作是创建将根据pkColumnNameList列管理序列增量的表。
GET_NEXT_SEQUENCE_VALUE-获得序列的名称来增加和pkColumnNameList主键的值和使下一个步骤: 1)动态地创建SQL工作 2)dbms_lock.allocate_unique();锁定表格 3)检查表格中是否存在表格中的记录,用于输入 中的pk值4)如果存在记录更新记录在序列列中具有max + 1 5)如果不存在记录插入在序列栏中输入1的新记录 6)返回新的ID;
我想收到有关此先谢谢了评论...
你能详细说明什么是序列号列吗? – FerranB 2010-02-15 15:59:39
有多少人的身份证你会有1-10或100,000的......有没有差距?如果只有少数人ID会制作n个序列 - 也就是说,如果允许有空位。不关注并发问题的人们,显然这不是一个严肃的应用程序,有数百个并发连接插入到这个表中。是吗? – 2010-02-15 16:53:04
那里有点讽刺,但总的来说我很认真。人们在询问您期望插入多少插件之前就会开始关注并发性。如果您每小时有10个插页,wtf会关心吗? – 2010-02-15 23:37:30