teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

推敲

2020/10/26 02:23

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -10,11 +10,12 @@
10
10
  );
11
11
  ```
12
12
  解説:
13
+ ・シーケンス値を(1-999)の範囲に分割する
13
- ・シーケンス値を(1-999)の範囲に分割する※シーケンス値は0開始にはできないので1始まりとし、-1で調整
14
+ ※シーケンス値は0開始にはできないので1始まりとし、-1で調整
14
15
  ・分割した値をA-Z(アルファベット26文字)で分割しChr()を使用してアルファベットに変換
15
16
  ・nextval()で発番されたシーケンス値をcurrval()で取得し分割。その値を書式設定
16
17
 
17
- 厳密さで言うと、nextval()とcurrval()の処理間で他のトランザクションでnextval()が使用されるとずれます。
18
+ 尚、厳密さで言うと、nextval()とcurrval()の処理間で他のトランザクションでnextval()が使用されるとずれます。
18
19
 
19
20
  以下の様なファンクションを利用した方が良いかもししれません。
20
21
  ```SQL

3

追記

2020/10/26 02:23

投稿

sazi
sazi

スコア25430

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

推敲

2020/10/26 02:21

投稿

sazi
sazi

スコア25430

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

推敲

2020/10/26 02:09

投稿

sazi
sazi

スコア25430

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()で取得し分割。その値を書式設定