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 | /
|
---|