平成26年度 春期 午前Ⅱ 問7
データ操作
カーソルに関する問題
次の SQL 文は,A 表に対するカーソル B のデータ操作である。a に入れるべき適切な字句はどれか。
UPDATE A
SET A2 = 1, A3 = 2
WHERE a
ここで,A 表の構造は次のとおりであり,下線は主キーを表す。
A(A1,A2,A3)
- アCURRENT OF A1
- イCURRENT OF B
- ウCURSOR B OF A
- エCURSOR B OF A1
答えと解説を見る
✓ これが正解イCURRENT OF B
解説
カーソルの指す行の更新は、CURRENT OF にカーソル名を続けます。
埋込みSQL でカーソルを使うと、FETCH で取り出した現在の行を、そのまま更新や削除の対象にできます。このときの書き方が、WHERE CURRENT OF の後ろにカーソル名を置く形で、カーソルが今指している1行だけを UPDATE の対象にします。設問ではカーソルの名前が B、更新する表が A なので、UPDATE A SET A2 = 1, A3 = 2 WHERE CURRENT OF B となります。CURRENT OF の後ろに来るのは列名でも表名でもなくカーソル名だと押さえれば、紛らわしい字句を見分けられます。
ほかの選択肢はなぜ違うのか
- アCURRENT OF A1:CURRENT OF の後ろに置くのはカーソル名です。A1 は A 表の主キーの列名なので、ここに書いてもカーソルが指している現在の行を指定したことにはなりません。
- ウCURSOR B OF A:CURSOR B OF A という字句は、位置付け更新の WHERE 句の書き方にはありません。カーソルの指す行を対象にするときは CURRENT OF を使い、CURSOR という語はここでは使いません。
- エCURSOR B OF A1:CURSOR B OF A1 も、WHERE 句でカーソルの行を指定する書き方としては成り立ちません。カーソル名の後ろに列名を付ける形もなく、正しくは CURRENT OF の後にカーソル名だけを置きます。
出典:平成26年度 春期 データベーススペシャリスト試験 午前Ⅱ 問7
この解説に誤りを見つけたら教えてください。直して、直した記録を残します。誤りを報告する(メールが開きます)