埋込みSQLで行を処理する名前はどう見分けるか
基本情報技術者試験 平成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;

- ア
カーソル
- イ
スキーマ
- ウ
テーブル
- エ
ビュー
会話形式の解説
講師同じ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は、カーソルが現在指している行を更新の対象にします。
選択肢ごとの解説
- ○ア カーソルカーソルは、問合せ結果の行を順に扱うための仕組みです。Xは一連のカーソル操作で指定されているので、カーソルの名前です。
- ×イ スキーマスキーマはデータベースの構造を定義するものです。行を取り出すFETCHの対象であるXには当たりません。
- ×ウ テーブルテーブルは行と列からなるデータの表で、このコードでは「従業員」が更新対象です。Xはその表から処理中の行を指すために使われています。
- ×エ ビュービューは問合せなどによって定義される仮想的な表です。XはOPENからCLOSEまで行を扱う操作に使われており、ビューの名前ではありません。
POINT
- 埋込みSQLでは、EXEC SQLに続けてSQLの命令をプログラム中に記述します。
- FETCHのINTOには、取り出した値を受け取る変数を指定します。
- WHERE CURRENT OFを読むときは、更新対象が現在処理中の行であることを確認します。
