Oracle University 講師が ORACLE MASTER 取得を目指している方に向けて試験トピックを解説するブログ連載講座。「ORACLE MASTER Silver SQL 2019」資格取得に向けた試験トピックについて解説します。

————————————————-

今回はORACLE MASTER Silver SQLの試験トピック「索引、シノニムおよびシーケンスの管理 – シーケンスの管理 -」に関連する問題をご紹介いたします。ORACLE MASTER Silver SQL(Exam Number: 1Z0-071-JPN)の詳細につきましては以下URLをご参考ください。

Oracle Database SQL Exam Number: 1Z0-071

URL: https://education.oracle.com/ja/oracle-database-sql/pexam_1Z0-071

それではさっそく問題を確認していきましょう。

(解説)

それでは解説していきましょう。順序(シーケンス)に関する問題なので順序定義の構文を押さえていく必要がありますが、先に表作成のところで指定されているDEFAULT句を確認しておきます。

列定義の際にDEFAULT句を指定すると、データ挿入時に該当列に対して値を省略した際、格納する値を指定することができます。簡単な定義を作って確認しておきます。

— sample テーブル作成 —
drop table test_t;
create table test_t (emp_number number(10) default 9999, name varchar2(20));

— sample データ挿入 —
insert into test_t(name) values(‘nomura’);
insert into test_t(emp_number, name) values(1, ‘nonomura’);
insert into test_t(emp_number, name) values(2, ‘nomura2’);
commit;

 

難しい内容ではありませんね。このDFAULT句の有効な値としてはリテラル値、式またはSQL関数がありますが、順序疑似列(CURRVALとNEXTVAL)も指定することが可能であり、今回の問題がそれに該当します。(注:DEFAULTで指定している値のデータ型は列のデータ型に一致している必要があります)

続いて順序とは?の解説になりますが、順序とは自動的に番号を生成し、それを複数のユーザーで使用することができるデータベース・オブジェクトになります。イメージ図も掲載しておきましょう。

順序オブジェクト作成の際に、一意の値を生成するように定義したり、同じ番号をリサイクルして使用するように定義することもできます。また順序値をあらかじめメモリー上にキャッシュしておくことでアクセス効率を向上させることも可能です。さて問題文にあったそれぞれのCREATE文の重要なところを押さえましょう。

※その他のオプションの詳細については「Oracle Database SQL言語リファレンス – CREATE SEQUENCE -」の内容を確認しておきましょう

順序の作成、使用方法については問題文にあるSQL文を実行して実際に操作してもよいですし、もっと簡単な定義を使って動作確認することでも理解が深まりますので是非実施してみてください。以下に簡単な構文例と実際に実行した内容を参考までに載せておきます。順序の定義を最大値10でNOCYCLE指定し、順序を使ったデータ挿入を実行しています。最終的にINSERT文を10回以上実行した場合にどのような動作になるか確認しています。

— sample 順序作成 —
create sequence seq1 increment by 1 start with 1 maxvalue 10 nocycle nocache;

— sample テーブル作成 —
create table tbl1 (a1 number);

— sample 順序を使ったデータ挿入 —
insert into tbl1 values(seq1.nextval);
commit;

 

さあ、DEFAULT句と順序の動作が確認できたので正しい選択肢を探していきましょう!

まず選択肢1ですが、order_id列にはDEFAULT句が指定してありますがデータ挿入時に値を明示的に指定できないというわけではありませんので誤りですね。

選択肢2は順序定義を確認するとNOCYCLE指定がありますから値をリサイクルして使用することはありません。つまり重複値の生成はありませんので正しい選択肢になります。

選択肢3は順序構文のCACHEの説明を再確認しましょう。順序値はあらかじめメモリー上に割当てることでアクセスを高速化できると説明しました。ただしメモリーに割当てるということはインスタンスが異常終了時にはメモリーから値が消えてしまいますので欠番が発生することになります。今回の問題文ではCACHE 1000 と定義しておりインスタンス異常終了時には欠番が発生する可能性がありますので誤りになります。

選択肢4は正しい内容ですね。DEFAULT句で順序を指定していますので明示的に値を入力しない場合は順序オブジェクトから値が割当てられます。

選択肢5は少し迷ったかもしれませんが誤りです。順序オブジェクトは表など他のオブジェクトに紐づいているものではなく独立したオブジェクトになります。適切な権限を付与すれば複数のユーザーで使用することができ、順序を削除したからといってすでに割当てられている値が消えるということはありません。

以上を踏まえまして正解は 2、4 になります。

今回も実機操作を取り入れた内容をお伝えしましたが出来るだけ簡単な構文を使用しました。構文が簡単だからといって、ただ眺めるだけでなく実際に操作してみてください。慣れている方、慣れていない方に限らず案外エラーが発生して「あれ?うまくいかないぞ??」と気づくことがあるかと思います。そうした発見が非常に重要で「どこが間違っているのか?」と問題点を探す癖を身に着けてください。そのような実機操作の積み重ねが力として身に付き、更なる高みを目指すことが可能になります!

それでは今回はここまでとします。お疲れ様でした。

————————————————-

ORACLE MASTER Silver SQL 2019 のご紹介

ORACLE MASTER Silver SQL 2019 試験記事トピック一覧

————————————————-

その他の ORACLE MASTER 試験トピック解説講座シリーズ:

【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧

————————————————-