ORACLE MASTER資格の中級に位置付けられ、取得すればOracle技術者としてグローバルに認定される「ORACLE MASTER Silver Oracle Database 10g」。例題を利用してポイントを押さえ、確実な合格を目指そう!
本連載第9回「SQLでのデータ操作方法を覚えよう」、第10回「Data PumpとSQL*Loaderによるデータのロード」で、データの管理方法を紹介しました。今回はPL/SQLについて学びます。
PL/SQLを使用したプログラム構造体(プロシージャ、ファンクション、パッケージ、トリガー)が対象です。詳細なコーディングが対象となるわけではなく、プログラム構造体の使い分け方や、関連する設定についてが対象となっています。
PL/SQL(Procedure Language/Structured Query Language)は、SQL文に手続き型の拡張機能を提供する言語です。プログラミング言語ですので、IF-THEN、CASE、LOOPといった処理を行うことができます。
PL/SQLを使用すると、データベースオブジェクトとして、次のものを作成することができます。
SQL> CREATE OR REPLACE PROCEDURE update_sal 2 (p_empno emp.empno%TYPE) 3 AS 4 BEGIN 5 UPDATE emp SET sal=sal*1.1 WHERE empno=p_empno; 6 END; 7 / プロシージャが作成されました。 SQL> SELECT sal FROM emp WHERE empno=7900; SAL ---------- 950 SQL> EXEC update_sal(7900) PL/SQLプロシージャが正常に完了しました。 SQL> SELECT sal FROM emp WHERE empno=7900; SAL ---------- 1045 SQL> COMMIT; コミットが完了しました。
SQL> CREATE OR REPLACE FUNCTION annual_sal 2 (p_sal NUMBER) 3 RETURN NUMBER 4 AS 5 v_sal PLS_INTEGER; 6 BEGIN 7 v_sal := p_sal * 12; 8 IF v_sal > 30000 THEN 9 v_sal := 30000; 10 END IF; 11 RETURN v_sal; 12 END; 13 / ファンクションが作成されました。 SQL> SELECT empno,sal,annual_sal(sal) FROM emp 2 WHERE deptno=10; EMPNO SAL ANNUAL_SAL(SAL) ---------- ---------- --------------- 7782 2450 29400 7839 5000 30000 7934 1300 15600
Oracleソフトウェアとして提供されるビルトインパッケージもあります。独自にコーディングしなくても即使用可能な拡張機能です。
PL/SQLによるプログラム構造体をコンパイルするときに関連する初期化パラメータとして、次のものがあります。
変更されることがないはずの顧客テーブルのデータが変更されていることが疑われています。PL/SQLを使用して監視する方法として適切なオブジェクトタイプを選択しなさい。
a.データベーストリガー
b.パッケージ
c.プロシージャ
d.ファンクション
正解:a
前回、宿題とした問題です。
PL/SQLを使用したプログラム構造体には、次のものがあります。
問題文にあるように表のデータ変更を監視するということは、表に対するDML文を監視することになります。データベーストリガーであれば、DML文をトリガーイベントとして作成できます(正解a)。
自動起動ではなく明示的に呼び出すプロシージャ、ファンクション、パッケージは、トリガーコードの中で利用することはできてもDML文での自動起動はできないため、不適切です。
初期化パラメータに次の設定がされています。
PLSQL_WARNINGS=ENABLE:PERFORMANCE
この場合の動作として正しいものを選択しなさい。
a.プログラムを変更するときにPL/SQLエンジンにより、パフォーマンス関連メッセージが表示される
b.プログラムを削除するときにPL/SQLエンジンにより、パフォーマンス関連メッセージが表示される
c.プログラムにアクセスするときにPL/SQLコンパイラにより、パフォーマンス関連メッセージが表示される
d.プログラムをコンパイルするときにPL/SQLコンパイラにより、パフォーマンス関連メッセージが表示される
正解:d
PLSQL_WARNINGS初期化パラメータを使用することで、PL/SQLプログラム構造体をコンパイルするときに表示される警告を制御できます(正解d)。
1つ目の引数にはENABLE(警告を受け取る)またはDISABLE(警告を受け取らない)を指定します。2つ目の引数には次のいずれかの値を指定します。
デフォルトでは、「DISABLE:ALL」となっており、コンパイル時に最適なパフォーマンスが提供されるようになっています。
コンパイルが行われるのは、プログラムの作成時または変更時、無効プログラムが実行されたとき(自動)です。従って、変更時に限定されるものではありません(選択肢a)。また削除時(選択肢b)、アクセス(実行)時(選択肢c)にはPLSQL_WARNINGS初期化パラメータは影響を与えません。
PL/SQLで作成されたプログラム内からサーバ上のテキストファイルに対し、複数のユーザーが読み取りと書き込みを実行できるように設定する方法として適切な方法を選択しなさい。
a.UTL_FILE_DIR初期化パラメータにディレクトリを設定し、インスタンスを再起動する
b.UTL_FILE_DIR初期化パラメータにディレクトリを設定し、PUBLICに権限を付与する
c.DIRECTORY初期化パラメータにディレクトリを設定し、インスタンスを再起動する
d.DIRECTORY初期化パラメータにディレクトリを設定し、PUBLICに権限を付与する
正解:a
PL/SQLのプログラムからサーバ上のテキストファイルを読み書きするには、UTL_FILEパッケージを使用します。このパッケージでは、アクセスするディレクトリにディレクトリオブジェクト、またはUTL_FILE_DIR初期化パラメータで指定された物理ディレクトリパスを指定することができます。
UTL_FILE_DIR初期化パラメータは、静的初期化パラメータです。修正した場合はインスタンスを再起動する必要があります(正解a)。
そのほかの選択肢の不正解の理由は次のとおりです。
●選択肢b:UTL_FILE_DIR初期化パラメータで指定した物理ディレクトリパスは、すべてのユーザーが自動的に使用可能になります。権限を付与して管理するのは、ディレクトリオブジェクトを使用した場合です。
●選択肢c、d:DIRECTORYという初期化パラメータはありません。ディレクトリオブジェクトはCREATE DIRECTORYコマンドで作成し、使用許可を与えたいユーザーには、READとWRITEの権限を付与して管理します。
次回から2回にわたって、「Oracle Databaseのセキュリティ」を確認します。次の宿題を解いておいてください。
ユーザーを作成後、パスワードをすぐに変更させ、パスワードには数値を1文字、アンダーバーを1文字含めるために設定する機能を2つ選択しなさい。
a.デフォルトパスワード
b.プロファイル
c.期限切れパスワード
d.パスワード検証ロール
IT資格試験の模擬問題をWebベースで学習できる@IT自分戦略研究所の新サービス「@IT資格攻略」では、「Silver DBA(Oracle10g)」をはじめOracle関連の資格をテーマとして取り上げています。「無料お試し版」もありますので、記事と併せてご覧ください。
Copyright © ITmedia, Inc. All Rights Reserved.