戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

基本情報技術者 2018年 春期 午前(科目A)28


問題文

次の埋込みSQLを用いたプログラムの一部において、Xは何を表す名前か。
EXEC SQL OPEN X;   EXEC SQL FETCH X INTO :NAME, :DEPT, :SALARY;   EXEC SQL UPDATE従業員     SET給与 = 給与* 1.1     WHERE CURRENT OF X; EXEC SQL CLOSE X;

選択肢

カーソル(正解)
スキーマ
テーブル
ビュー

🔒 解説は解答すると表示されます

カーソル操作【午前解説】

正解の理由

正解は (カーソル)です。与えられたコードは典型的な埋込みSQLのカーソル操作を示しています。手順としては
  1. EXEC SQL OPEN X; でカーソルXの結果集合を開く
  2. EXEC SQL FETCH X INTO :NAME, :DEPT, :SALARY; で現在行をホスト変数に取得する
  3. EXEC SQL UPDATE 従業員 SET 給与 = 給与 * 1.1 WHERE CURRENT OF X; で「カーソルXの現在行」を指定して当該行を更新する
  4. EXEC SQL CLOSE X; でカーソルを閉じる
    この一連の流れは「カーソル」を操作する典型例であり、Xはカーソル名以外に解釈できません。

解法ステップ

  1. SQLキーワードを確認する:OPEN、FETCH、WHERE CURRENT OF、CLOSE に注目する。
  2. 各キーワードの用途を思い出す:OPEN/FETCH/CLOSE はカーソル操作の基本であると認識する。
  3. WHERE CURRENT OF の意味を確認する:これは「カーソルの現在行」を指定する専用構文である。
  4. 選択肢と照合する:カーソル以外(スキーマ、テーブル、ビュー)はこれらの動作説明と一致しないため除外する。

選択肢別の誤答解説

  • ア: カーソル — 正解。OPEN/FETCH/CLOSE と WHERE CURRENT OF はカーソル操作に固有の構文です。
  • イ: スキーマ — 誤り。スキーマはデータベースのオブジェクト群の論理的な分類名であり、OPEN/FETCH と関連しません。
  • ウ: テーブル — 誤り。テーブルはデータ集合だが、WHERE CURRENT OF はテーブル名でなくカーソルの位置を示すため一致しません。
  • エ: ビュー — 誤り。ビューもテーブルのような仮想表だが、FETCH や CURRENT OF の対象名にはなりません(ビュー自身をカーソル名に使うことはできても、文脈上 X はカーソル名である必要があります)。

よくある誤解

  • WHERE CURRENT OF が「テーブル名を参照している」と誤解する:実際には現在処理中のカーソルの行位置を指します。
  • FETCH を単なる SELECT と混同する:FETCH は既にオープンされたカーソルから順次行を取り出す操作であり、単発の問い合わせとは用途が異なります。
  • カーソルは必ず行ごと更新を必要とすると思い込む:多くの場合は集合演算(SETベース)の更新で置換可能で、パフォーマンス面で差が出ます。

補足コラム

埋込みSQLでカーソルを使う典型例(擬似コード):
EXEC SQL DECLARE X CURSOR FOR
    SELECT 名, 部署, 給与 FROM 従業員 WHERE 条件 FOR UPDATE;

EXEC SQL OPEN X;
EXEC SQL FETCH X INTO :NAME, :DEPT, :SALARY;
EXEC SQL UPDATE 従業員
    SET 給与 = 給与 * 1.1
    WHERE CURRENT OF X;
EXEC SQL CLOSE X;
ポイント:
  • UPDATE ... WHERE CURRENT OF を使う場合、多くのDBではカーソル宣言に FOR UPDATE が必要です。
  • カーソルは行単位の処理が必要なときに便利ですが、大量行の更新は集合更新(例:UPDATE 従業員 SET 給与 = 給与 * 1.1 WHERE 条件)に比べて性能が劣ることが多いです。
  • ホスト変数はコロン付き(:NAME)で表現され、FETCH によりアプリケーション側に行データが渡されます。

FAQ

Q1: WHERE CURRENT OF X は必ず使うべきですか?
A1: 行単位で「現在行」を確実に更新したい場合は有効ですが、可能なら集合更新の方が性能面で有利です。
Q2: FETCH と SELECT の違いは何ですか?
A2: SELECT はクエリ実行で結果集合を返す命令、FETCH は既に開いたカーソルから順次行を取り出す命令です。
Q3: カーソル宣言はどこに書くべきですか?
A3: 埋込みSQLでは通常、プログラムのSQL文ブロック内で EXEC SQL DECLARE ... CURSOR FOR ... として宣言します。
Q4: WHERE CURRENT OF を使う際に注意する点は?
A4: カーソルが更新可能であること(FOR UPDATE 等)とトランザクションの整合性、ロックの影響に注意してください。

関連キーワード: 埋込みSQL、カーソル、OPEN、FETCH、WHERE CURRENT OF、CLOSE、ホスト変数、更新カーソル、トランザクション、FOR UPDATE
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

基本情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について