mku2bullさんの投稿一覧
【質問】
同一セッション内で該当のシーケンスに対して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が返される
です。
_______________________________________________