mku2bullさんの投稿一覧

助け合いフォーラムの投稿
2025/01/07 コメント
シーケンス操作関数について
納得して理解できました!ご回答ありがとうございます!
2025/01/04 投稿
シーケンス操作関数について

【質問】
同一セッション内で該当のシーケンスに対してnextvalが一度も呼ばれていなければ、currval関数はエラーを返すと認識しています。
その為、回答としては④も正しいですが、②も正しいと思います。
しかし、【解説】ではcurrval関数は、この問題の条件ではエラーにはならず、「100を返す」と説明しています。
勉強中の身で解説の正しいor間違いを判断できないのと、調べても出てこないのでここで質問させて頂きます。
どうぞよろしくお願いいたします。

___________________________________________________
【問題文】
以下のSQLが実行された場合の説明として、正しいものはどれか。
CREATE SEQUENCE sample_seq CACHE 5 NO CYCLE;
SELECT setval('sample_seq', 100);

【選択肢】
①「SELECT nextval('sample_seq');」を実行すると105が返される
②「SELECT currval('sample_seq');」を実行するとエラーとなる
③「SELECT currval('sample_seq');」を実行すると5が返される
④「SELECT nextval('sample_seq');」を実行すると101が返される (正解はコレ)
⑤「SELECT nextval('sample_seq');」を実行すると100が返される

【解説】
1行ずつ確認していきます。

CREATE SEQUENCE sample_seq CACHE 5 NO CYCLE;
「sample_seq」シーケンスを作成しています。
オプションにより、メモリに格納できるシーケンス番号の量が5、シーケンスが限界値に達した時はエラーになるように設定されています。増減値は指定がないため、1ずつ増加します。

SELECT setval('sample_seq', 100);
シーケンスの現在の値を100に設定しています。

この場合、「SELECT currval('sample_seq');」を実行すると100が、「SELECT nextval('sample_seq');」を実行すると101が取得されます。

したがって正解は
・「SELECT nextval('sample_seq');」を実行すると101が返される
です。
_______________________________________________

合格体験記の投稿
投稿がありません