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

回答編集履歴

1

追加

2017/02/25 06:46

投稿

A.Ichi
A.Ichi

スコア4070

answer CHANGED
@@ -11,4 +11,32 @@
11
11
 
12
12
  SELECT last_value FROM abc_a_seq;
13
13
 
14
+ ```
15
+
16
+ テーブルが決まらない場合を考えでみました。
17
+ (1)RETURNINGを使う
18
+ INSERTのSQLでreturningを使う事で最新番号を取得する。
19
+ (2)FUNCTIONを使う
20
+ FUNCTIONのEXCEPTIONでエラーを拾う。
21
+ ```sql
22
+ CREATE OR REPLACE FUNCTION get_last_seq() RETURNS int AS
23
+ $BODY$
24
+ DECLARE _RC INT := 0;
25
+ BEGIN
26
+ SELECT LASTVAL() INTO _RC;
27
+ RETURN _RC;
28
+ EXCEPTION
29
+ WHEN object_not_in_prerequisite_state
30
+ THEN RETURN 0;
31
+ END;
32
+ $BODY$
33
+ LANGUAGE plpgsql;
34
+
35
+
36
+ tsdb=> select get_last_seq();
37
+ get_last_seq
38
+ --------------
39
+ 0
40
+ (1 row)
41
+ -- 0はnextval未実行
14
42
  ```