業務で必要になるかもしれないのでPL/SQLについて学んでみた。
今回は基本となる3つの部と書き方と変数の定義について学んでみたよ。
###使用した環境
Oracle Live SQL
###PL/SQLとは
SQLを手続き型言語として拡張したプログラミング言語。
まぁ、SQLの言語+Cとかの手続き型言語を合体させて便利にさせたもの。
これがあればSQL文とif文やfor文などのプログラムが同時に書ける。
しかも、データベースの中にも入れられちゃう。すごい。
####43つの部があるよ
名称 | 書き方 | どんなことを書くのか |
---|---|---|
宣言部 | DECLARE | ブロック内で使用する変数などを宣言 |
実行部 | BEGEIN | SQLによるデータ操作や手続き処理を記述 |
例外処理部 | EXECPTION | ブロック内で発生したエラー(例外)の処理を記述 |
ブロックの最後には必ず「END;」を記述すること。
(手続きが多言語の一つであるCOBOLでいうピリオドみたいな感じかな)
####HelloWorld(プログラムでまず初めに学ぶであろう事柄)
ここでは、基本的な書き方と変数、定数について書いていくよ。
【例文】
DECLARE
--変数と定数の宣言
str VARCHAR2(30) := 'Hello, world!'; --文字型
num constant NUMBER default 100; --数値
BEGIN
--変数と定数の内容を画面に出力
DBMS_OUTPUT.PUT_LINE(str);
DBMS_OUTPUT.PUT_LINE(num);
--変数への代入
str := 'Good Bye';
--変数の内容を画面に出力
DBMS_OUTPUT.PUT_LINE(str);
END;
Statement processed.
Hello, world!
100
Good Bye
できた!!!
ここでは以下のことをしているよ
- 変数と定数の宣言
- 変数と定数の内容を画面に出力
- 変数への代入
- もう一度変数の内容を画面に出力
#####変数と定数の宣言
変数を宣言する構文はこんな感じかな。
1. 変数のみを宣言する
変数名 データ型;
2. 変数を宣言して初期値を代入する。
変数名 データ型 := 値;
変数名 データ型 default 値;
3. 変数を非NULL制約をつけて宣言(必ず代入が必要)
変数名 データ型 not null := 値;
:=とdefaultの違いは初期値とデフォルト値くらいの違いかな?
というよりどっかの格好つけたがりがいろんな種類があった方がよくねと言って作ったとしか
大抵は:=を使えばいいんだと思う。
それと、非NULL制約をつけた場合は
DECLARE
--変数宣言
str VARCHAR2(30) not null; --文字型
BEGIN
str := 'HEllo';
--変数の内容を画面に出力
DBMS_OUTPUT.PUT_LINE(str);
END;
ORA-06550: line 3, column 7:
PLS-00218: a variable declared NOT NULL must have an initialization assignment
このように、コンパイルエラーが発生するみたいだね。
(まぁ、変数を空にするなと言われているのに値を入れていない、変数を空にしているんだから当たり前か)
定数を宣言する構文はこんな感じかな。
定数とは値が定まった数と言う名前の通り、必ず初期値が必要なんだ。
宣言だけしたらエラーになるから気を付けてね。
変数名 CONSTANT データ型 := 値;
変数名 CONSTANT データ型 default 値;
それと、定数にした場合はもう値を書き換えられないよ。
DECLARE
num constant NUMBER := 100; --定数
BEGIN
num := 10;
END;
ORA-06550: line 4, column 3:
PLS-00363: expression 'NUM' cannot be used as an assignment target
このように、コンパイルエラーが発生するみたいだね。
(まぁ、値は定まっているんでと言われているのに値を変えようとしているんだから当たり前か)
#####値の表示と文字の結合
んで、値の表示には
DBMS_OUTPUT.PUT_LINE(値とか数式とか);
を使うらしい。
値のほかにも数式、変数や定数なども使えるよ。
これは値の確認とかでこれからたくさん使うから必ず覚えてね。
あっ、文字列の結合は
num NUMBER default 100; --数値
DBMS_OUTPUT.PUT_LINE('数値だよ'||num);
数値だよ100
て具合に「||」を使うらしい
(&とか+じゃないんだね。sqlでも確かこうだったから同じだね)
あっ、そうそうデータ型についても話とかなきゃ。
えっと、なになに……あっ、SQLと同じなのか。じゃぁ、いっか。
よし、終り。
あとは、参考記事を確認すること。
私より1000パー分かりやすいから。
それじゃぁ、以上。
あぁ、お腹空いた。
バーイ
####参考にした記事
[超入門PL/SQL]
(https://atmarkit.itmedia.co.jp/ait/series/5485/ "超入門「PL/SQL」")
ここからはじめようOracle PL/SQL入門