我試圖查看是否存在某些東西來創建一個具有分區邏輯的序列。 我需要依賴於其他主鍵的前一個序列號: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