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;