DDLの出題ポイント
データ定義言語といえば、CREATE
、ALTER
、DROP
ですね。 定義するオブジェクトには、表、ビュー、シノニム、順序があります。 12c SQLの試験対策的には、表と順序が重要オブジェクトです。
表の定義時に指定するものには、データ型と制約があります。 データ型は、LONG
とINTERVAL
が最重要ポイント。 制約は、CREATE TABLE AS SELECT
またはALTER
との合わせ技で出題されることが多く、要注意です。
なんだか、盛りだくさんですね。1つずつポイントを押さえていきましょう。
データ型
では、問題を解きながら、基本のおさらいをしましょう。
問1
EMPLOYEES表の構造を確認してください。
名前 NULL? 型 ----------------- -------- ------------ EMPLOYEE_ID NOT NULL NUMBER(6) EMPLOYEE_NAME VARCHAR2(50) GENDER CHAR PHONE_NUMBER VARCHAR2(20) HIRE_DATE NOT NULL DATE SALARY NUMBER COMMISSION_PCT NUMBER(2,2) EMPLOYEE_IMAGE LONG DEPARTMENT_ID NUMBER(4)
この表の作成とデータ型について正しいものをすべて選択しなさい。
- a. HIRE_DATE列には、世紀、年、月、日、曜日、時、分、秒、小数秒を格納できる
- b. GENDER列は有効桁数を指定していないので、作成時エラーになる
- c. SALARY列は有効桁数を指定していないので、作成時エラーになる
- d. COMMISSION_PCT列に2桁の整数を入力するとエラーになる
- e. データ型がLONGの新しい列をこの表に追加することができる
- f. データ型がCLOBの新しい列をこの表に追加することができる
日付を扱うデータ型には、DATE
とTIMESTAMP
があります。 小数秒を格納できるのはTIMESTAMP
型であって、DATE
型ではありません(選択肢aは不正解)。
文字を扱うCHAR
型、VARCHAR2
型と数値を扱うNUMBER
型は、格納できるデータの有効桁数(最大桁数)を指定できます。VARCHAR2
は桁数の指定を省略するとエラーになりますが、CHAR
とNUMBER
にはデフォルト値が設定されるため(CHAR
は1文字、NUMBER
は38桁)、エラーにはなりません(選択肢b、cは不正解)。
NUMBER
型では、全体の桁数と小数点以下の桁数を指定できます。 例えば、NUMBER(5,2)
は「全体の桁数が5桁そのうち小数点以下が2桁」という定義で、整数部に格納可能なのは3桁です。 ということは、NUMBER(2,2)
は「全体の桁数2桁のうち2桁とも小数点以下」という定義ですから、整数2桁の値を入力(更新)すると次のとおりエラーになります(選択肢dは正解)。
SQL> SELECT commission_pct FROM employees 2 WHERE employee_id = 178; COMMISSION_PCT -------------- .15 SQL> UPDATE employees SET commission_pct = 98 2 WHERE employee_id = 178; UPDATE employees SET commission_pct = 98 * 行1でエラーが発生しました。: ORA-01438: この列に許容される指定精度より大きな値です
VARCHAR2
で格納できるサイズよりも大きな文字列を格納できるデータ型として、LONG
とCLOB
があります。 CLOB
は、最大「(4GB-1)× DB_BLOCK_SIZE初期化パラメータ[1]の値」まで文字を格納できるラージオブジェクトの1つで、Oracle8から実装されました。それ以前にはLONG
型しかありませんでした。 LONG
型には次のような制限があり、CLOB
ではそれらの制限が緩和されているのはそうした経緯によるものです(選択肢eは不正解、fは正解)。
LONG型の制限
- 1つの表当たり1列しか定義できない
- 制約を指定できない
-
GROUP BY
句およびORDER BY
句で使用できない - 副問合せを使用して表を作成した場合、コピーされない
試験でLONG
の出題が多いのは、「LONG
を使用するような案件があるならば、CLOB
が適切でないか検討してください」と注意を促しているのでしょうね。
注
[1]: Oracleが使用するメモリやプロセスまたはデータベース全体に関わる設定値。