Tihiroの頭を休めるIT教室

少しだけ頭使って後は根性

関数実行時にnextval(sequence)がエラーとなる。

概要

PL/pgSQLの関数を実行しようとした際に発生するエラーについて。

環境は

です。

エラー内容

ERROR: query has no destination for result data HINT: If you want to discard the results of a SELECT, use PERFORM instead. CONTEXT: PL/pgSQL function my_function() line 4 at SQL statement Error

ERROR: query has no destination for result data SQL state: 42601 Hint: If you want to discard the results of a SELECT, use PERFORM instead. Context: PL/pgSQL function my_function() line 4 at SQL statement

という感じです。

ちなみにmy_functionが関数名です。

原因

エラーメッセージ内にも書かれていますが、値を返さないSELECTはPERFORMにしろって話みたいです。

つまり

SELECT nextval('my_seq');

ではなく

PERFORM nextval('my_seq');

とする。

まとめ

関数ではなくBEGIN、ENDの場合はSELECTで大丈夫みたい。どういう違いがあるんでしょ?