ORACLE PL/SQL(宣言部)編

オラクルちょこっとリファレンス

HOME > PL/SQL(宣言部)編

PL/SQL(宣言部)

PL/SQLはストアドプロシージャの事で、プログラミング言語でプログラムを書くような感じでSQL文を記述することが出来ます。なので、普通にSQLを記述するよりは遥かに複雑な処理を記述する事ができます。

また、記述したPL/SQLはデータベース内にコンパイルされた状態で置かれるので、実行時の処理速度が速いです。実行する時はそのPL/SQLを呼び出すだけでよいので、一度作成しておけば実行が非常に簡単で、またSQLをネットワーク上に流さないためネットワークにかける負荷を減らす事ができます。

複雑なSQLを記述する必要がある場合や、同じような処理を沢山実行する場合、バッチ系の処理をする時には非常に有効です。

PL/SQL基本構成

PL/SQLは以下のような構成をしてます。

PL/SQL構文の構成
DECLARE
  宣言部;
BEGIN
  実行部;
EXCEPTION
  例外処理部;
END;

基本構成
宣言部 変数・定数・カーソルを宣言する
実行部 処理を記述する(必須項目です。)
例外処理部 実行部でエラーが発生した場合の処理を記述する

宣言部

宣言部ではPL/SQLの実行部で使用する変数の名前と型を宣言します。
(CやJAVAなどの言語でする変数の宣言と同じです)

PL/SQLで使用する変数の型はCREATE TABLEなどで使用するデータ型とは少し異なる部分がありますのでご注意ください。

データ型
スカラー型 NUMBER 数値型
【構文】 変数名 NUMBER [:= 初期値] [NOT NULL]
CHAR 文字型
【構文】 変数名 CHAR [:= 初期値] [NOT NULL]
NCHAR 文字型(Unicode)
【構文】 変数名 NCHAR [:= 初期値] [NOT NULL]
VARCHAR2 文字列型
【構文】 変数名 VARCHAR2 [:= 初期値] [NOT NULL]
NVARCHAR2 文字列型(Unicode)
【構文】 変数名 NVARCHAR2 [:= 初期値] [NOT NULL]
DATE 日付型
【構文】 変数名 DATE [:= 初期値] [NOT NULL]
TIMESTAMP タイムスタンプ型
【構文】 変数名 TIMESTAMP [:= 初期値] [NOT NULL]
BOOLEAN boolean型
【構文】 変数名 BOOLEAN [:= 初期値] [NOT NULL]
BINARY_INTEGER NUMBER型よりもメモリの消費量が少ない
【構文】 変数名 BINARY_INTEGER [:= 初期値] [NOT NULL]
PLS_INTEGER BINARY_INTEGER型よりも高速
【構文】 変数名 PLS_INTEGER [:= 初期値] [NOT NULL]
参照型 表名.列名%TYPE 既存のカラムの型を参照する
【構文】 変数名 表名.列名%TYPE
表名%ROWTYPE 既存の表と同じレコードを定義する
【構文】 変数名 表名%ROWTYPE
コレクション型 RECORD フィールドが集まって構成されている型。構造体。レコード。
【構文】
 TYPE レコード名 IS RECORD(
  フィールド名1 データ型 [:= 初期値],
  フィールド名2 データ型 [:= 初期値],
 )

 変数名 レコード名;
TABLE 索引付表。配列
【構文】
 TYPE 索引付表名 IS TABLE OF データ型[NOT NULL]
  INDEX BY BINARY_INTEGER;

 変数名 索引付表名;

レコードの索引付表
レコードの配列。レコードと索引付表を組み合わせた型。
【構文】
 TYPE レコードの索引付表名 IS TABLE OF レコード型
  INDEX BY BINARY_INTEGER;

 変数名 レコードの索引付表名;

レコード型はRECORDで作った型でも%ROWTYPEでもOK
NESTED TABLE  
VARRAY 可変長配列(上限値あり)
LOB型 CLOB 4GBまでのテキストデータ(シングルバイト/マルチバイト)
NCLOB 4GBまでのテキストデータ(Unicode)
BLOB 4GBまでのバイナリデータ
BFILE 4GBまでのバイナリデータ(外部ファイルに格納)
例外型 EXCEPTION EXCEPTIONをユーザ定義する
【構文】 例外名 EXCEPTION

定義した例外にエラーコードを設定する場合
【構文】 PRAGMA EXCEPTION_INIT(例外名, エラーコード);
(※定義できるエラーコードの範囲は-20000~-20999まで)

<定数>

変数の宣言時に「CONSTANT」というキーワードを使用すると、その変数は定数として扱われ、格納された値が変更できなくなります。

定数を宣言することで、不用意に値が書き換えられてしまう事を防ぎます。定数は消費税率など、普段は固定値だけどもしかしたら値が変わるかもしれないといった値に使用されます。

定数の宣言例
NUMBER 変数名 CONSTANT NUMBER(n) := 数値;
CHAR 変数名 CONSTANT CHAR(n) := 文字;
VARCHAR2 変数名 CONSTANT VARCHAR2(n) := 文字列;
DATE 変数名 CONSTANT DATE := 日付;
定数の宣言例
--(例)NUMBER型定数 KINGAKU_500(値:500) を宣言する KINGAKU_500 CONSTANT NUMBER(3,0) := 500; --(例)CHAR型定数 DELFLG_DELETE(値:'1') を宣言する DELFLG_DELETE CONSTANT CHAR(1) := '1'; --(例)DATE型定数 DATE_TODAY(値:sysdate) を宣言する DATE_TODAY CONSTANT DATE := sysdate;

<カーソル>

カーソルとは複数行が返るSELECT文を実行した時に、その結果の中から1行ずつ取り出して使いたい場合に使用します。
(JAVAでいうResultSetみたいなものです。)

カーソルの宣言例
CURSOR カーソルを定義する
【構文】 CURSOR カーソル名 IS <SELECT文 ~>

変数を定義してカーソルをOPENするときにWHERE句などに値を指定することができる。
【構文】 CURSOR カーソル名(変数名) IS <SELECT文 ~>
カーソル定義の例
CURSOR cursor1 IS SELECT col1, col2, col3 FROM test_table WHERE create_date >= sysdate;
ToTop