| 1 | CREATE OR REPLACE PACKAGE django_seq IS
|
|---|
| 2 |
|
|---|
| 3 | FUNCTION NEXTVAL RETURN NUMBER;
|
|---|
| 4 | FUNCTION CURRVAL RETURN NUMBER;
|
|---|
| 5 | END django_seq;
|
|---|
| 6 | /
|
|---|
| 7 | CREATE OR REPLACE PACKAGE BODY django_seq IS
|
|---|
| 8 |
|
|---|
| 9 | last_val NUMBER;
|
|---|
| 10 | shard_no NUMBER;
|
|---|
| 11 |
|
|---|
| 12 | FUNCTION NEXTVAL RETURN NUMBER IS
|
|---|
| 13 | BEGIN
|
|---|
| 14 | SELECT to_number(to_char(mr_inne_seq.nextval) || lpad(shard_no, 4, '0')) ||
|
|---|
| 15 | ltrim(to_char(MOD(abs(hsecs), 1000000), '000000'))
|
|---|
| 16 | INTO last_val
|
|---|
| 17 | FROM sys.v_$timer;
|
|---|
| 18 | RETURN last_val;
|
|---|
| 19 | END;
|
|---|
| 20 |
|
|---|
| 21 | FUNCTION CURRVAL RETURN NUMBER IS
|
|---|
| 22 | no_current_value EXCEPTION;
|
|---|
| 23 | PRAGMA EXCEPTION_INIT(no_current_value, -8002);
|
|---|
| 24 | BEGIN
|
|---|
| 25 | IF (last_val IS NULL) THEN
|
|---|
| 26 | RAISE no_current_value;
|
|---|
| 27 | END IF;
|
|---|
| 28 | RETURN last_val;
|
|---|
| 29 | END CURRVAL;
|
|---|
| 30 |
|
|---|
| 31 | BEGIN
|
|---|
| 32 | --- the code below can use database table lookup
|
|---|
| 33 | shard_no := 5;
|
|---|
| 34 |
|
|---|
| 35 | END django_seq;
|
|---|
| 36 | /
|
|---|