PL/SQL - 基本構文
こんにちは、未来のプログラマーさんたち!今日は、PL/SQLのエキサイティングな世界に飛び込みます。これまでに一行もコードを書いたことがない方でも心配しないでください - から始めて、知識をステップバイステップで築いていきます。このチュートリアルの終わりには、自信を持って初めてのPL/SQLプログラムを書けるようになるでしょう!
「Hello World」の例
伝統的な「Hello World」プログラムから始めましょう。これはすべてのプログラマーにとっての儀式であり、PL/SQLの構文を手にするのに最適な方法です。
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, World!');
END;
/
これを分解してみましょう:
-
BEGIN
:このキーワードはPL/SQLブロックの開始を示します。 -
DBMS_OUTPUT.PUT_LINE('Hello, World!');
:この行はメッセージを出力します。PL/SQLが私たちに話しかける方法だと思ってください。 -
END;
:これはPL/SQLブロックの終了を示します。 -
/
:このフォワードスラッシュはSQL*PlusにPL/SQLブロックを実行させる指示です。
このコードを実行すると、「Hello, World!」が画面に表示されます。おめでとうございます!あなたは初めてのPL/SQLプログラムを書いたばかりです。
PL/SQLの識別子
識別子は、変数、プロシージャ、関数などのさまざまなプログラム要素に与える名前です。コードの異なる部分の名札のようなものです。識別子を作成するためのルールは以下の通りです:
- 字母で始める必要があります(A-Zまたはa-z)。
- 字母、数字(0-9)、ドル記号($)、アンダースコア(_)、ポンド記号(#)に続けられます。
- 30文字を超えることはできません。
- 保留語(BEGIN、END、IFなど)ではできません。
以下にいくつかの例を見てみましょう:
DECLARE
employee_name VARCHAR2(50);
salary NUMBER;
dept_id NUMBER(5);
BEGIN
-- コードはここに
END;
/
この例では、employee_name
、salary
、dept_id
はすべて有効な識別子です。
PL/SQLのデリミタ
デリミタは、PL/SQLで特定の意味を持つ特殊な文字や記号です。これらは、文の句読点のようなもので、コードの異なる部分を構造化し、区切るのに役立ちます。
以下は一般的なPL/SQLデリミタの表です:
デリミタ | 説明 |
---|---|
; | 文の終了 |
% | 属性指示子 |
. | コンポーネントセレクタ |
( ) | パラメータのリストをくくる |
, | パラメータのセパレータ |
:= | 代入演算子 |
=> | 結合演算子 |
-- | 単行コメントの指示子 |
/ / | 複行コメントの指示子 |
以下にいくつかの例を見てみましょう:
DECLARE
v_count NUMBER := 0; -- 代入演算子
v_name VARCHAR2(50) := 'John Doe';
BEGIN
v_count := v_count + 1; -- 文の終了
DBMS_OUTPUT.PUT_LINE('Name: ' || v_name); -- コンポーネントセレクタ
END;
/
PL/SQLのコメント
コメントはコードの中の sticky note 一样的东西。コンパイラには無視されますが、コードの説明には非常に役立ちます。PL/SQLには2種類のコメントがあります:
- 単行コメント:
--
で始まります。 - 複行コメント:
/*
と*/
でくくまれます。
以下に例を示します:
DECLARE
-- これは単行コメント
v_pi NUMBER := 3.14159;
BEGIN
/*
これは複行コメント。
複数の行にまたがることができます。
長い説明には非常に便利です。
*/
DBMS_OUTPUT.PUT_LINE('piの値は: ' || v_pi);
END;
/
PL/SQLプログラムユニット
PL/SQLプログラムユニットは、PL/SQLアプリケーションの構成要素です。これは、料理本のレシピのように、特定のタスクを実行する方法を記述しています。主な種類は以下の通りです:
- 匿名ブロック
- プロシージャ
- 関数
- パッケージ
それぞれの例を見てみましょう:
1. 匿名ブロック
「Hello World」の例で見たものです。データベースに保存されないコードブロックです。
BEGIN
DBMS_OUTPUT.PUT_LINE('これは匿名ブロックです');
END;
/
2. プロシージャ
名前付きのPL/SQLブロックで、特定のアクションを実行します。
CREATE OR REPLACE PROCEDURE greet_user(p_name IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE('Hello, ' || p_name || '!');
END;
/
-- プロシージャの呼び出し:
BEGIN
greet_user('Alice');
END;
/
3. 関数
プロシージャと似ていますが、値を返します。
CREATE OR REPLACE FUNCTION calculate_area(p_radius IN NUMBER)
RETURN NUMBER IS
v_pi CONSTANT NUMBER := 3.14159;
BEGIN
RETURN v_pi * p_radius * p_radius;
END;
/
-- 関数の使用:
DECLARE
v_area NUMBER;
BEGIN
v_area := calculate_area(5);
DBMS_OUTPUT.PUT_LINE('面積は: ' || v_area);
END;
/
4. パッケージ
関連するプロシージャ、関数、変数、その他のPL/SQLオブジェクトのコレクションです。
CREATE OR REPLACE PACKAGE math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER;
END math_operations;
/
CREATE OR REPLACE PACKAGE BODY math_operations AS
FUNCTION add_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a + b;
END add_numbers;
FUNCTION subtract_numbers(a IN NUMBER, b IN NUMBER) RETURN NUMBER IS
BEGIN
RETURN a - b;
END subtract_numbers;
END math_operations;
/
-- パッケージの使用:
DECLARE
v_result NUMBER;
BEGIN
v_result := math_operations.add_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 + 5 = ' || v_result);
v_result := math_operations.subtract_numbers(10, 5);
DBMS_OUTPUT.PUT_LINE('10 - 5 = ' || v_result);
END;
/
以上です!PL/SQLの基本構文をカバーしました。シンプルな「Hello World」プログラムから、パッケージなどの複雑な構造までです。プログラミングを学ぶことは新しい言語を学ぶのと同じで、練習と忍耐が必要です。コード例を試してみて、修正して、何が起こるかを確認してみてください。これがコンセプトを本当に理解し、熟練したPL/SQLプログラマーになるための方法です。
ハッピーコーディング、そしてあなたのクエリがいつも期待する結果を返すことを祈っています!
Credits: Image by storyset