【Oracle】PL/SQLの概要メモ
- 
          カテゴリ:
                      
 - DB
 
最近OracleのPL/SQLを使ったんですが、分からな過ぎていろいろ調べたので、その内容をここにメモしておきます。大分殴り書きにメモになりますが悪しからず....
PL/SQLはoracleのSQLに、処理(ファンクション)を加えたもののイメージ。
注意点としては、読みだす関数は読みだされる関数より上に記述しなけえればならない。
プロシージャとファンクションについて
プロシージャ
 ・「手続き」という意味。
 ・戻り値なし
ファンクション
 ・「関数」という意味。
 ・戻り値あり
※ファンクションの戻り値
 ・Result という変数は関数において暗黙的に宣言されているもので、ファンクション内でResultに値をセットしておけば、自動的に読み出し元に返される。
カーソル(CURSOR)
問合わせ(データ操作も含む)を行なうための情報を管理する作業領域をあらわすための「タグ」のようなものである。このカーソルにユーザーが名前を付けているものを 明示カーソル と呼ぶ。暗黙カーソル では Oracle によって用意されている名前の無い作業領域を使用している。
値の代入
NVL(A,B)
    AがnullならBを、AがnullじゃなければそのままA
A := B
    BをAに代入
A = B
    AとBは同じ
A => B
    AをBに代入
例外処理
RAISE :ユーザー定義例外を発生させる
※「NULL;」と記述すると例外を無視して、次の処理に移る
例)
create or replace procedure exception_sample1
is
    eUserException  exception;
begin
    RAISE eUserException;
end;
/
参考:http://www.shift-the-oracle.com/plsql/exception/raise.html
OTHERS: 例外は特別な例外名で、すべての例外をあらわすことができる。ただし、OTHERS は他の例外と一緒に並べることはできない。
例)
DECLARE
    vNum    NUMBER(2);
BEGIN
    -- ZERO DIVIDE EXCEPTION
    vNum := 1 / 0;
    DBMS_OUTPUT.PUT_LINE('数値=' || vNum);
EXCEPTION
    WHEN ZERO_DIVIDE THEN
        DBMS_OUTPUT.PUT_LINE('計算できませんでした');
    WHEN OTHERS THEN
    --    < 例外処理 >
        RAISE;
END;
/
参考:http://www.shift-the-oracle.com/plsql/exception/exception-when.html
