回答編集履歴
4
推敲
answer
CHANGED
@@ -10,11 +10,12 @@
|
|
10
10
|
);
|
11
11
|
```
|
12
12
|
解説:
|
13
|
+
・シーケンス値を(1-999)の範囲に分割する
|
13
|
-
|
14
|
+
※シーケンス値は0開始にはできないので1始まりとし、-1で調整
|
14
15
|
・分割した値をA-Z(アルファベット26文字)で分割しChr()を使用してアルファベットに変換
|
15
16
|
・nextval()で発番されたシーケンス値をcurrval()で取得し分割。その値を書式設定
|
16
17
|
|
17
|
-
|
18
|
+
尚、厳密さで言うと、nextval()とcurrval()の処理間で他のトランザクションでnextval()が使用されるとずれます。
|
18
19
|
|
19
20
|
以下の様なファンクションを利用した方が良いかもししれません。
|
20
21
|
```SQL
|
3
追記
answer
CHANGED
@@ -12,4 +12,24 @@
|
|
12
12
|
解説:
|
13
13
|
・シーケンス値を(1-999)の範囲に分割する※シーケンス値は0開始にはできないので1始まりとし、-1で調整
|
14
14
|
・分割した値をA-Z(アルファベット26文字)で分割しChr()を使用してアルファベットに変換
|
15
|
-
・nextval()で発番されたシーケンス値をcurrval()で取得し分割。その値を書式設定
|
15
|
+
・nextval()で発番されたシーケンス値をcurrval()で取得し分割。その値を書式設定
|
16
|
+
|
17
|
+
※厳密さで言うと、nextval()とcurrval()の処理間で他のトランザクションでnextval()が使用されるとずれます。
|
18
|
+
|
19
|
+
以下の様なファンクションを利用した方が良いかもししれません。
|
20
|
+
```SQL
|
21
|
+
create or replace function NumberingID() RETURNS text
|
22
|
+
AS $$
|
23
|
+
DECLARE
|
24
|
+
wSerial bigint:=nextval('serial')-1;
|
25
|
+
BEGIN
|
26
|
+
RETURN chr(((wSerial/999%26)+65)::int) || to_char(wSerial%999+1, 'FM000');
|
27
|
+
END;
|
28
|
+
$$
|
29
|
+
LANGUAGE PLpgSQL;
|
30
|
+
```
|
31
|
+
```SQL
|
32
|
+
create table Numbering_test (
|
33
|
+
ID text default NumberingID()
|
34
|
+
);
|
35
|
+
```
|
2
推敲
answer
CHANGED
@@ -10,7 +10,6 @@
|
|
10
10
|
);
|
11
11
|
```
|
12
12
|
解説:
|
13
|
-
・シーケンス値を(1-999)の範囲に分割する
|
14
|
-
・シーケンス値は0開始にはできないので1始まりとし、-1で調整
|
13
|
+
・シーケンス値を(1-999)の範囲に分割する※シーケンス値は0開始にはできないので1始まりとし、-1で調整
|
15
14
|
・分割した値をA-Z(アルファベット26文字)で分割しChr()を使用してアルファベットに変換
|
16
15
|
・nextval()で発番されたシーケンス値をcurrval()で取得し分割。その値を書式設定
|
1
推敲
answer
CHANGED
@@ -13,5 +13,4 @@
|
|
13
13
|
・シーケンス値を(1-999)の範囲に分割する
|
14
14
|
・シーケンス値は0開始にはできないので1始まりとし、-1で調整
|
15
15
|
・分割した値をA-Z(アルファベット26文字)で分割しChr()を使用してアルファベットに変換
|
16
|
-
・分割した値を書式設定
|
17
|
-
・nextval()で発番されたシーケンス値をcurrval()で取得
|
16
|
+
・nextval()で発番されたシーケンス値をcurrval()で取得し分割。その値を書式設定
|