回答編集履歴
4
推敲
test
CHANGED
@@ -22,7 +22,9 @@
|
|
22
22
|
|
23
23
|
解説:
|
24
24
|
|
25
|
+
・シーケンス値を(1-999)の範囲に分割する
|
26
|
+
|
25
|
-
|
27
|
+
※シーケンス値は0開始にはできないので1始まりとし、-1で調整
|
26
28
|
|
27
29
|
・分割した値をA-Z(アルファベット26文字)で分割しChr()を使用してアルファベットに変換
|
28
30
|
|
@@ -30,7 +32,7 @@
|
|
30
32
|
|
31
33
|
|
32
34
|
|
33
|
-
|
35
|
+
尚、厳密さで言うと、nextval()とcurrval()の処理間で他のトランザクションでnextval()が使用されるとずれます。
|
34
36
|
|
35
37
|
|
36
38
|
|
3
追記
test
CHANGED
@@ -27,3 +27,43 @@
|
|
27
27
|
・分割した値をA-Z(アルファベット26文字)で分割しChr()を使用してアルファベットに変換
|
28
28
|
|
29
29
|
・nextval()で発番されたシーケンス値をcurrval()で取得し分割。その値を書式設定
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
※厳密さで言うと、nextval()とcurrval()の処理間で他のトランザクションでnextval()が使用されるとずれます。
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
以下の様なファンクションを利用した方が良いかもししれません。
|
38
|
+
|
39
|
+
```SQL
|
40
|
+
|
41
|
+
create or replace function NumberingID() RETURNS text
|
42
|
+
|
43
|
+
AS $$
|
44
|
+
|
45
|
+
DECLARE
|
46
|
+
|
47
|
+
wSerial bigint:=nextval('serial')-1;
|
48
|
+
|
49
|
+
BEGIN
|
50
|
+
|
51
|
+
RETURN chr(((wSerial/999%26)+65)::int) || to_char(wSerial%999+1, 'FM000');
|
52
|
+
|
53
|
+
END;
|
54
|
+
|
55
|
+
$$
|
56
|
+
|
57
|
+
LANGUAGE PLpgSQL;
|
58
|
+
|
59
|
+
```
|
60
|
+
|
61
|
+
```SQL
|
62
|
+
|
63
|
+
create table Numbering_test (
|
64
|
+
|
65
|
+
ID text default NumberingID()
|
66
|
+
|
67
|
+
);
|
68
|
+
|
69
|
+
```
|
2
推敲
test
CHANGED
@@ -22,9 +22,7 @@
|
|
22
22
|
|
23
23
|
解説:
|
24
24
|
|
25
|
-
・シーケンス値を(1-999)の範囲に分割する
|
26
|
-
|
27
|
-
・シーケンス値は0開始にはできないので1始まりとし、-1で調整
|
25
|
+
・シーケンス値を(1-999)の範囲に分割する※シーケンス値は0開始にはできないので1始まりとし、-1で調整
|
28
26
|
|
29
27
|
・分割した値をA-Z(アルファベット26文字)で分割しChr()を使用してアルファベットに変換
|
30
28
|
|
1
推敲
test
CHANGED
@@ -28,6 +28,4 @@
|
|
28
28
|
|
29
29
|
・分割した値をA-Z(アルファベット26文字)で分割しChr()を使用してアルファベットに変換
|
30
30
|
|
31
|
-
・分割した値を書式設定
|
32
|
-
|
33
|
-
・nextval()で発番されたシーケンス値をcurrval()で取得
|
31
|
+
・nextval()で発番されたシーケンス値をcurrval()で取得し分割。その値を書式設定
|