マナビング基本情報技術者

埋込みSQLで行を処理する名前はどう見分けるか

基本情報技術者試験 平成30年度春期 午前 問28 / データベース › データ操作

過去問にチャレンジ

平成30年度春期 午前 問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;

平成30年度春期 午前 問28の図
  1. ア

    カーソル

  2. イ

    スキーマ

  3. ウ

    テーブル

  4. エ

    ビュー

会話形式の解説

講師講師
同じXが、行を扱うどの操作に指定されているかを追ってみましょう。
受験者受験者
UPDATEがあるので、Xは更新するテーブルの名前かと思いました。
講師講師
更新するテーブルは、UPDATEの直後にある「従業員」です。XはOPEN、FETCH、CLOSEに指定されています。
受験者受験者
OPENで開き、FETCHで行を取り出し、CLOSEで閉じる対象なのですね。
講師講師
はい。その一連の操作で使うのはカーソルです。問合せ結果の行を順に扱う仕組みで、Xはその名前を表します。
受験者受験者
FETCHの後にあるNAMEなどは、取り出した値を受け取る変数ですか。
講師講師
そのとおりです。FETCHのINTOには、取り出した値を受け取る変数を指定します。
受験者受験者
では、WHERE CURRENT OF Xは、Xが現在指している行を更新するという意味ですね。
講師講師
はい。給与を変更する対象は、カーソルが現在指している行です。ここからもXがカーソルの名前だと確認できます。
受験者受験者
スキーマやビューもデータベースに関係する名前ですが、この操作には合いませんね。
講師講師
スキーマはデータベースの構造を定義するもの、ビューは問合せなどで定義される仮想的な表です。どちらも、このコードでOPENからCLOSEまで行を扱うXには当たりません。

まとめ

Xはカーソルの名前です。OPEN、FETCH、CLOSEに同じ名前が指定され、WHERE CURRENT OFでは現在指している行が更新対象になります。更新するテーブルは「従業員」であり、FETCHのINTOにある変数は取り出した値を受け取ります。スキーマやビューも、この一連の操作の対象には当たりません。

解答・解説

正解はアです

この問題のテーマ

埋込みSQLで、行を順に処理するときに使う名前を問う問題です。

解き方の考え方

同じXがOPEN、FETCH、CLOSEに指定されている点に注目します。これらは、処理する行を指し示すカーソルを開き、行を取り出し、閉じる操作です。さらにWHERE CURRENT OF Xは、カーソルが現在指している行を更新の対象にします。

選択肢ごとの解説

  1. ○ア  カーソル
    カーソルは、問合せ結果の行を順に扱うための仕組みです。Xは一連のカーソル操作で指定されているので、カーソルの名前です。
  2. ×イ  スキーマ
    スキーマはデータベースの構造を定義するものです。行を取り出すFETCHの対象であるXには当たりません。
  3. ×ウ  テーブル
    テーブルは行と列からなるデータの表で、このコードでは「従業員」が更新対象です。Xはその表から処理中の行を指すために使われています。
  4. ×エ  ビュー
    ビューは問合せなどによって定義される仮想的な表です。XはOPENからCLOSEまで行を扱う操作に使われており、ビューの名前ではありません。

POINT

  • 埋込みSQLでは、EXEC SQLに続けてSQLの命令をプログラム中に記述します。
  • FETCHのINTOには、取り出した値を受け取る変数を指定します。
  • WHERE CURRENT OFを読むときは、更新対象が現在処理中の行であることを確認します。

※出典:平成30年度春期 基本情報技術者試験 午前 問28(一部改変)