SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

直近開催のイベントはこちら!

HRzine Day 2024 Winter

2024年2月1日(木)12:00~17:40

主要製品スペック一覧

人事業務の効率・確度・精度を高めるために欠かせないHRテクノロジー。その主な製品の機能を分野ごとに比較できる資料群です。製品検討の参考資料としてご活用ください。

人事労務管理システム<br>主要製品スペック一覧 2023

人事労務管理システム
主要製品スペック一覧 2023

その他のスペック一覧

タレントマネジメントシステム<br>主要製品スペック一覧 2023

タレントマネジメントシステム
主要製品スペック一覧 2023

採用管理システム<br>主要製品スペック一覧 2023

採用管理システム
主要製品スペック一覧 2023

落とし穴はこれで回避! Oracle DB 12c SQL基礎 弱点克服スクール | 第12回(最終回)

12c SQL基礎の総復習「模擬問題」

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena

DML文の使用による表の管理

問9

次のSQLを実行しました。

CREATE TABLE products
(product_id number
,product_name varchar2(30));

INSERT INTO products VALUES(1,'Tennis Racket');
SAVEPOINT a;
INSERT INTO products VALUES(2,'Tennis Ball Pack 4');
SAVEPOINT b;

ALTER TABLE products ADD (price NUMBER);

UPDATE products set price = 30000
WHERE product_id = 1;
SAVEPOINT c;

UPDATE products set price = 2000
WHERE product_id = 2;
SAVEPOINT d;

DELETE FROM products WHERE product_id = 2;

ROLLBACK TO SAVEPOINT a;  

結果に関して正しい記述はどれですか。最適なものを選択しなさい。

  • a. 2つ目のINSERTとprice列の追加および2つのUPDATEと1つのDELETEがロールバックされる
  • b. 2つ目のINSERTと2つのUPDATEと1つのDELETEがロールバックされる
  • c. エラーになる
  • d. 2つのUPDATEと1つのDELETEがロールバックされる

これは、実行結果を見るのが早いですね。

SQL> CREATE TABLE products
  2  (product_id number
  3  ,product_name varchar2(30));

表が作成されました。

SQL> INSERT INTO products VALUES(1,'Tennis Racket');

1行が作成されました。

SQL> SAVEPOINT a;

セーブ・ポイントが作成されました。

SQL> INSERT INTO products VALUES(2,'Tennis Ball Pack 4');

1行が作成されました。

SQL> SAVEPOINT b;

セーブ・ポイントが作成されました。

SQL> ALTER TABLE products ADD (price NUMBER);

表が変更されました。

SQL> UPDATE products set price = 30000
  2  WHERE product_id = 1;

1行が更新されました。

SQL> SAVEPOINT c;

セーブ・ポイントが作成されました。

SQL> UPDATE products set price = 2000
  2  WHERE product_id = 2;

1行が更新されました。

SQL> SAVEPOINT d;

セーブ・ポイントが作成されました。

SQL> DELETE FROM products WHERE product_id = 2;

1行が削除されました。

SQL>
SQL> ROLLBACK TO SAVEPOINT a;
ROLLBACK TO SAVEPOINT a
*
行1でエラーが発生しました。:
ORA-01086: セーブポイント'A'はこのセッションで設定されていないか、無効です

実行結果のとおり、正解は選択肢cです。

私は、SAVEPOINT(セーブポイント)は「進行中のトランサクションに付箋を貼るイメージ」などと説明するのですが、ROLLBACK時に指定することで「付箋(SAVEPOINT)の位置まで取り消しなさい」と指示することができます。

したがって、本来なら選択肢bのように1つ目のINSERTは残り2つ目のINSERT以降のトランザクションが取り消し(ROLLBACK)されるのですが(したがって、選択肢bは不正解)――そうです、正解した人は気づいていましたよね。

ALTERのようなDDL(データ定義言語)は暗黙のコミット(COMMIT)が含まれるため、2つのINSERTはすでにコミットされており、取り消すことができません。

さらに説明すると、コミットされたということは、そこでトランザクションが終了したということです。つまり、2つのINSERTが実行されたトランザクションは終了し、UPDATE以降のDMLは別のトランザクションであるということです。

冒頭SAVEPOINTの説明で「進行中のトランザクション」と言いましたよね。進行中のトランザクションに「a」というSAVEPOINTは存在しないから、ORA-01086エラーになるのです。「存在しないなら、トランザクションの先頭までROLLBACKしてしまえ(選択肢d)」ということにはなりませんし、DDL操作をROLLBACKすること(選択肢a)はできません。

トランザクションの管理に関する出題は必ずあると思いますので、間違えた人は復習しておいてください。

次のページ
データ定義言語の概要

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
めざせオラクルマスターホルダー! Oracle DB 12c SQL基礎 弱点克服スクール連載記事一覧

もっと読む

この記事の著者

林 優子(ハヤシ ユウコ)

日本オラクル株式会社の教育ビジネスのスタートアップを全面的に支援し、バージョン5の頃からOracleに携わるベテラン講師として知る人も多い。Oracle認定講師を表彰するExcellent Instructorを連続受賞。1ランク上のITスペシャリスト育成を目標に、データベース分野にとどまらず「プレゼンテーション」、「ロジカルシンキング」などのトレーニングも手がけている。著書に『オラクルマスター教科書』シリーズ(翔泳社)、『プロとしてのデータモデリング入門』(SBクリエイティブ)など。その他、雑誌執筆、著書・メディア出演も多数。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事をシェア

  • Facebook
  • Twitter
  • Pocket
  • note
  • hatena
HRzine
https://hrzine.jp/article/detail/412 2017/02/22 14:00

Special Contents

AD

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

HRzine Day(エイチアールジン・デイ)は、人が活き会社が成長する人事のWebマガジン「HRzine」が主催するイベントです。毎回、人事の重要課題を1つテーマに設定し、識者やエキスパードが持つ知見・経験を、参加者のみなさんと共有しています。

2024年2月1日(木)12:00~17:40

イベントカレンダーを見る

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング