PL/SQLは、SQL文では不可能な条件分岐処理や繰り返し処理、エラー処理などの処理を可能にする、Oracleの独自の言語である。
プロシージャ機能 | 変数、定数、制御構造、カーソルの利用、エラー処理 |
既存知識の応用 | プロシージャ型言語構造の併用、習得したPL/SQL知識を全てのOracleツールで活用可能 |
パフォーマンスの向上 | SQL文を1文ずつ送信するのではなく、ブロック単位で送信するため、パフォーマンスが向上 |
高い移植性 | PL/SQLで書かれたプログラムは、Oracleの稼働環境すべてに移殖可能 |
Oracleとの統合 | SQLデータ型のサポート。また、データベースの列定義をもとにして変数を宣言できるため、プログラムの修正を最小限に押さえられる |
CREATEを使用して明示的に作成され、データベース内に格納されたPL/SQLのプログラムのこと。
プロシージャ |
特定の処理を実行するサブプログラム ****構文
|
ファンクション |
関数。値を計算するサブプログラム。 ****特徴
****構文
|
パッケージ |
プロシージャやファンクション、変数定義などをカプセル化したスキーマ・オブジェクト ****特徴
****構文
|
データベーストリガー | 表と結び付けられているストアド・サブプログラム。ユーザーからのDML文(INSERT、UPDATE、DELETE)によって、自動的に起動する。 |
CREATE TRIGER文にBEFORE または AFTERオプションを指定して、実行中のトリガー文によってトリガー本体が起動されるタイミングを指定できる。
BEFOREオプション(例1参照)を指定すると、文の前に1回、AFTERオプション(例2参照)を指定すると文の後に1回起動される。
例1)
CREATE OR REPLACE TRIGGER log_salary_increase
BEFORE UPDATE ON Emp_tab
BEGIN
INSERT INTO Emp_log 〜;
END;
例2)
CREATE OR REPLACE TRIGGER log_salary_increase
AFTER UPDATE ON Emp_tab
BEGIN
INSERT INTO Emp_log 〜;
END;
FOR EACH ROWオプションによって、トリガーが行トリガーになるか文トリガーになるかが決定される。(例3参照)
FOR EACH ROWオプションを省略した場合、トリガーは文トリガーとなり、個々の文に対して1回のみ起動される。
FOR EACH ROWを指定すると、該当する各行が変更される度に起動される。
例えば、例3のトリガーを定義した後、例4のUPDATE文を実行する。その時、Deptno = 20に該当するレコードが5行あったら、
例3のトリガーが5回起動される。
例3)
CREATE OR REPLACE TRIGGER log_salary_increase
AFTER UPDATE ON Emp_tab
FOR EACH ROW
WHEN (new.Sal > 1000)
DECLARE
sal_diff number;
BEGIN
INSERT INTO Emp_log (Emp_id, Log_date, New_salary, Action)
VALUES (:new.Empno, SYSDATE, :new.SAL, 'NEW_SAL');
END;
例4)
UPDATE Emp_tab SET Sal = Sal + 1000.0
WHERE Dptno = 20;
SQLによるRDBMSとの接続には、ODBCドライバを使用する。ODBCドライバは、各RDBMSごとに異なる製品として提供されており、
Oracleと接続するにはOracle ODBCドライバを使用する。
ODBCドライバの設定を行うことで、AccessからOracleのデータが操作可能になる。
Oracle Objects for OLEは、アプリケーション・プログラムに対して、データベースへのアクセス機能を提供する製品。
MicroSoft ExcelやMicrosoft Visual BasicなどのOLEクライアントから呼び出し、データベースへのアクセスが可能となる。
2001/03/14 担当:A.M