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