PL / SQLは、構造化照会言語が直面する欠点を克服する手続き型言語です。これはSQLの拡張であり、PL/SQLアプリケーションやプログラムで面倒なことなくSQLクエリを使用することもできます。このPL/SQLチュートリアルでは、PL/SQLの基本概念について詳しく説明します。この記事では、次のトピックについて説明します。
- PL / SQLとは何ですか?
- 機能
- PL/SQLとSQL
- PL/SQLのブロック構造
- PL/SQL変数
- PL/SQLの関数
- PL/SQLプロシージャ
- ネストされたブロック
- IFステートメント
- CASEステートメント
- ループステートメント
- Whileループステートメント
- Forループステートメント
- 例外処理
PL / SQLとは何ですか?
これは、構造化照会言語に対する手続き型言語拡張の略です。 Oracleは、SQLのいくつかの制限を拡張して、Oracleデータベースで実行されるミッションクリティカルなアプリケーションを構築するためのより包括的なソリューションを提供するPL/SQLを作成しました。
機能
-
PL / SQLは、意思決定、反復などの手続き型言語の機能を提供します。
-
1つのコマンドを使用して、PL/SQLは多数のクエリを実行できます。
-
作成後にデータベースに格納されている関数、トリガー、プロシージャなどのPL/SQLユニットを再利用することもできます。
-
PL / SQLには、PL/SQLの例外を処理する例外処理ブロックもあります。
-
PL/SQLを使用して広範なエラーチェックも可能です
-
PL / SQLで記述されたアプリケーションは、オラクルが動作可能でなければならない場合、他のハードウェアおよびオペレーティングシステムに移植可能です。
PL/SQLとSQL
SQL | PL / SQL |
SQLは、DDLおよびDML操作を実行するために使用される単一のクエリです | PL / SQLは、プログラム全体またはプロシージャ/関数などを定義するために使用されるコードのブロックです。 |
実際には、物事をどのように行う必要があるかを定義するのではなく、何を行う必要があるかを定義します | PL / SQLは、物事をどのように行う必要があるかを定義します |
単一のステートメントを実行します | ステートメントのブロックを一度に実行します。 |
SQLは主にデータの操作に使用されます | 一方、PL / SQLは、アプリケーションの作成に使用されます |
PL/SQLコードを含めることはできません | SQL拡張機能であるため、SQLコードを含めることができます |
PL/SQLのブロック構造
PL / SQLは通常、コードをブロックに編成します。名前のないコードブロックは、匿名ブロックと呼ばれます。 Oracleデータベースに保存されないため、匿名ブロックと呼ばれます。 PL/SQLの匿名ブロックを見てみましょう。
[DECLARE] declaration statements; [BEGIN] execution statements; [EXCEPTION] exception statements; END; /
上記の図を見ると、ブロック構造が宣言、開始、例外、終了の4つの部分に分割されていることがわかります。 PL/SQLでブロック構造がどのように機能するかを理解してみましょう。これらすべてのセクションのうち、実行セクションは必須であり、残りはすべてオプションです。
-
DECLARE キーワードは宣言セクションに使用され、変数、関数などのデータ型と構造を宣言するために使用されます。
-
BEGIN キーワードは実行セクションに使用されます。これは必須であり、実行する必要のあるすべてのステートメントが含まれています。このブロックはビジネスロジックが定義されている場所であり、このブロックでは手続き型ステートメントとSQLステートメントの両方を使用できます。
-
例外 キーワードは例外セクションに使用されます。すべての例外ステートメントが含まれています。
-
END キーワードはブロックの終わりを示し、スラッシュ「/」は、PL / SQLブロックの実行に使用しているツール(Oracle Database Tool)を示します。
PL/SQLコードの使用方法を示す簡単な例を次に示します。
BEGIN NULL; END; /
PL / SQLでブロック構造がどのように機能するかがわかったので、変数の宣言、命名、値の割り当てなど、PL/SQLのさまざまな側面を理解しましょう。
PL/SQL変数
PL / SQLの変数は、基本的にはさまざまな名前、または特定のデータ型をサポートする一時的な格納場所です。 PL/SQLプログラムで変数を使用する方法を見てみましょう。
可変命名規則
PL / SQLは、変数の命名に関して次のルールに従います。
-
変数は31文字を超えることはできません
-
変数の名前はASCII文字で始まる必要があります。 PL / SQLでは大文字と小文字が区別されるため、大文字と小文字は異なる変数になります。
-
最初の文字の後には、特殊文字($、_)または任意の数字が必要です。
命名規則
変数を使用するには、以下にリストされている命名規則を使用してください。
プレフィックス | データ型 |
v _ | VARCHAR2 |
n _ | NUMBER |
t _ | 表 |
r _ | 行 |
d _ | 日付 |
b _ | ブール値 |
宣言
PL/SQLで変数宣言がどのように行われるかを理解してみましょう
宣言には、変数名の後にデータ型が続き、セミコロンで区切られています。以下は、PL/SQLで変数を宣言する方法を示す例です。
DECLARE v_name VARCHAR(25); n_age NUMBER(3); BEGIN NULL; END;
上記の例で行ったように、データ型の長さを追加することもできます。
アンカー
アンカーは基本的に、テーブル内の特定の列の列のデータ型に関連付けられたデータ型で変数を宣言するための%TYPEキーワードの使用を指します。
これを理解するために例を見てください。テーブルEMPLOYEESがあるとすると、次の方法でアンカーを使用できます。
DECLARE v_name EMPLOYEE.NAME%TYPE; n_age EMPLOYEE.AGE%TYPE; BEGIN NULL; END; /
割り当て
変数の代入は非常に簡単です。代入演算子を使用して、変数に値を代入できます。次の例は、変数に値を割り当てる方法を示しています。
DECLARE v_name VARCHAR(20); n_course VARCHAR(10); BEGIN v_name = "edureka"; v_course = "sql"; END; /
初期化
宣言セクションで変数の値を初期化することもできます。次の例は、値を変数に初期化する方法を示しています。
DECLARE v_name VARCHAR(20) = "edureka"; n_course VARCHAR(10) = "sql"; BEGIN NULL; END; /
変数の操作方法がわかったので、PL/SQLで関数をどのように使用するかを理解してみましょう。
PL/SQLの関数
PL / SQLの関数は、基本的に値を返す名前付きブロックです。サブルーチンまたはサブプログラムとも呼ばれます。次の構文は、PL/SQLで関数を使用する方法を示しています。
CREATE [OR REPLACE] FUNCTION function_name [( parameter_1 [IN] [OUT] data_type, parameter_2 [IN] [OUT] data_type, parameter_N [IN] [OUT] data_type] RETURN return_data_type IS BEGIN statements return return_data_type; EXCEPTION END; /
まず、キーワードの後に関数名を指定する必要があります。関数名は動詞で始まる必要があります。関数には、パラメーターで指定するパラメーターがないか、1つ以上ある場合があります。各パラメータのデータ型を明示的に指定する必要があります。そうすると、次のいずれかのモードになります。
-
IN – INパラメータは読み取り専用パラメータです。
-
OUT – 書き込み専用パラメータです
-
IN OUT – INOUTパラメータは両方とも読み取り/書き込みパラメータです。
PL/SQLで関数を使用する方法を示す簡単な例を次に示します。
CREATE OR REPLACE FUNCTION try_parse( iv_number IN VARCHAR2) RETURN NUMBER IS BEGIN RETURN to_number(iv_number); EXCEPTION WHEN others THEN RETURN NULL; END;
関数の呼び出し
次の例では、匿名ブロックで作成した関数を呼び出してみましょう。
SET SERVEROUTPUT ON SIZE 1000000; DECLARE n_x number; n_y number; n_z number; BEGIN n_x := try_parse('256'); n_y := try_parse('29.72'); n_z := try_parse('pqrs'); DBMS_OUTPUT.PUT_LINE(n_x); DBMS_OUTPUT.PUT_LINE(n_y); DBMS_OUTPUT.PUT_LINE(n_z); END; /
SELECTステートメントで関数を呼び出すこともできます。 PL / SQLで関数を使用する方法がわかったので、PL/SQLでプロシージャを操作する方法を理解してみましょう。
PL/SQLプロシージャ
プロシージャは基本的に、特定のタスクを実行するブロックです。手順を使用して、複雑なビジネスロジックをラップまたはカプセル化し、アプリケーション層とデータベース層の両方で再利用できます。
PL/SQLでプロシージャがどのように機能するかを理解するための簡単な例を見てみましょう
CREATE OR REPLACE PROCEDURE adjust_salary( in_employee_id IN EMPLOYEES.EMPLOYEE_ID%TYPE, in_percent IN NUMBER ) IS BEGIN -- update employee's salary UPDATE employees SET salary = salary + salary * in_percent / 100 WHERE employee_id = in_employee_id; END;
上記の例では、2つのパラメーターがあります。プロシージャは、指定されたパーセンテージで給与を調整し、UPDATEキーワードは給与情報の値を更新します。
手順ヘッダー
キーワードISの前のセクションは、プロシージャヘッダーと呼ばれます。以下は、手順を操作する際に知っておく必要のあるいくつかの指針です。
-
スキーマ– プロシージャが属するスキーマのオプションの名前です。
-
名前– 動詞で始まるプロシージャの名前。
-
パラメータ– これはオプションのパラメータリストです。
-
AUTHID – プロシージャを現在のユーザーの権限で実行するか、プロシージャの元の所有者の権限で実行するかを決定します。
手順本体
ISキーワードの後に続くものはすべてプロシージャ本体と呼ばれます。プロシージャ本体には、宣言、例外、および実行のステートメントがあります。関数とは異なり、プロシージャのRETURNキーワードは、実行を停止し、呼び出し元に制御を返すために使用されます。
プロシージャの呼び出し
PL/SQLでプロシージャを呼び出す方法を見てみましょう。
EXEC procedure_name(param1,param2…paramN);
EXECキーワードとプロシージャ名を使用するだけで、パラメータなしでプロシージャを呼び出すことができます。プロシージャの操作方法がわかったので、ネストされたブロックがPL/SQLでどのように使用されるかを理解してみましょう。
ネストされたブロック
ネストされたブロックは、プログラムの実行と例外処理をより適切に制御するための1つ以上のPL/SQLブロックの組み合わせに他なりません。
ネストされたブロックの簡単な例を次に示します。
SET SERVEROUTPUT ON SIZE 1000000; DECLARE n_emp_id EMPLOYEES.EMPLOYEE_ID%TYPE := &emp_id1; BEGIN DECLARE n_emp_id employees.employee_id%TYPE := &emp_id2; v_name employees.first_name%TYPE; BEGIN SELECT first_name INTO v_name FROM employees WHERE employee_id = n_emp_id; DBMS_OUTPUT.PUT_LINE('First name of employee ' || n_emp_id || ' is ' || v_name); EXCEPTION WHEN no_data_found THEN DBMS_OUTPUT.PUT_LINE('Employee ' || n_emp_id || ' not found'); END; END; /
上記の例の外側のPL / SQLブロックは親ブロックまたは囲みブロックと呼ばれ、内側のブロックは子ブロックまたは囲まれたブロック。
実行中に子ブロック変数が親ブロック変数をオーバーライドするため、両方のブロックで同じ名前の変数を使用することはお勧めできません。これは、PL/SQLが自身のブロック内の変数を最優先するために発生します。
ブロックラベル
この問題は、ラベルを使用してブロック内の変数を参照するのに役立つブロックラベルで解決できます。
これは、ブロックラベルの使用方法を示す簡単な例です。
<<block_label>> DECLARE ... BEGIN ... END;
ブロックラベルを使用すると、コードの可読性が向上し、制御が向上し、ブロックへの参照が作成されます。ネストされたブロックを操作する方法がわかったので、PL/SQLでIFステートメントがどのように機能するかを理解してみましょう。
IFステートメント
PL/SQLには3つのIFステートメントがあります
-
IF-THEN –条件が真の場合はステートメントが実行され、条件が偽の場合は何も実行されない場合が最も簡単なIFステートメントです。
-
IF-THEN-ELSE – この場合、ステートメントの代替シーケンスにELSE句が追加されます。
-
IF-THEN-ELSEIF – これにより、複数のテスト条件を順番に実行できます。
IF-THEN構文
IF condition THEN sequence_of_statements; END IF;
IF-THEN-ELSE構文
IF condition THEN sequence_of_if_statements; ELSE sequence_of_else_statements; END IF;
IF-THEN-ELSEIF構文
IF condition1 THEN sequence_of_statements1 ELSIF condition2 THEN sequence_of_statements2 ELSE sequence_of_statements3 END IF;
IFステートメントが完了したので、PL/SQLのCASEステートメントを見てみましょう。
CASEステートメント
CASEステートメントは、基本的に、セレクターに基づいて一連のステートメントを実行するのに役立ちます。この場合、セレクターは何でもかまいません。変数、関数、または単純な式にすることができます。 PL/SQLのCASE文の構文を示す簡単な例を次に示します。
[<<label_name>>] CASE [TRUE | selector] WHEN expression1 THEN sequence_of_statements1; WHEN expression2 THEN sequence_of_statements2; ... WHEN expressionN THEN sequence_of_statementsN; [ELSE sequence_of_statementsN+1;] END CASE [label_name];
上記の構文では、CASEキーワードの後にセレクターがあります。 PL / SQLは、セレクタを1回だけ評価して、実行する必要のある文を判別します。
セレクターの後には、WHENキーワードが続きます。式がセレクターを満たす場合、THENキーワードの後の対応するステートメントが実行されます。
CASEステートメントの使用方法がわかったので、PL/SQLでループステートメントを使用する方法を理解してみましょう。
ループステートメント
PL / SQLのループ文は、一連の文を複数回実行できる反復文です。 PL/SQLのループ文の構文を示す簡単な例を次に示します。
LOOP sequence_of_statements; END LOOP;
LOOPキーワードとENDLOOPキーワードの間に少なくとも1つの実行可能ステートメントが必要です。
EXITステートメントでループ
EXITおよびEXITwhenステートメントを使用すると、ループを終了できます。 EXIT WHENステートメントはループを条件付きで終了し、EXITは実行を無条件で終了します。
LOOP ... EXIT WHEN condition; END LOOP;
ループラベル
ネストされたループで使用される場合、ループラベルはループカウンター変数の名前を修飾するために使用されます。ループラベルの構文は次のとおりです。
<<label>> LOOP sequence_of_statements; END LOOP label;
ループステートメントの使用方法がわかったので、理解を深めるためにwhileループステートメントを見てみましょう。
Whileループステートメント
実行が開始されるまで実行回数が定義されていない場合は、WHILEループステートメントを使用できます。次の構文は、PL/SQLのWHILEループ文に使用されます。
WHILE condition LOOP sequence_of_statements; END LOOP;
構文の条件は、TRUE、FALSE、またはNULLのいずれかであると評価されるブール値または式です。条件がTRUEの場合、ステートメントが実行され、FALSEの場合、実行は停止し、制御は次の実行可能ステートメントに進みます。
WHILEループステートメントの使用方法がわかったので、FORループステートメントを見てみましょう。
Forループステートメント
PL / SQLのFORループ文を使用すると、一連の文を一定の回数実行できます。以下は、PL/SQLでFORループ文を使用するための構文です
FOR loop_counter IN [REVERSE] lower_bound .. higher_bound LOOP sequence_of_statements; END LOOP;
PL / SQLは、ループのINTEGERデータ型を使用してローカル変数loop_counterを自動的に作成するため、明示的に宣言する必要はありません。 lowerbound..higherboundは、ループが繰り返される範囲です。また、LOOPキーワードとENDLOOPキーワードの間に少なくとも1つの実行可能ステートメントが必要です。
PL / SQLでループ文を使用する方法がわかったので、PL/SQLでの例外処理を見てみましょう。
例外処理
PL / SQLでは、あらゆる種類のエラーが例外として扱われます。例外は、実行フローを変更または変更できる特別な条件として扱うことができます。 PL / SQLには、2種類の例外があります。
-
システム例外– エラーを検出すると、PL/SQLランタイムによって発生します。
-
プログラマー定義の例外– これらの例外は、特定のアプリケーションでプログラマーによって定義されます。
例外の定義
PL / SQLの例外は、発生する前に宣言する必要があります。以下の例で行ったように、EXCEPTIONキーワードを使用して例外を定義できます。
EXCEPTION_NAME EXCEPTION;
例外を発生させるために、RAISEキーワードを使用します。
RAISE EXCEPTION_NAME;
これでPL / SQLについて説明しました。この記事が、知識に価値を付加するのに役立つことを願っています。 SQLまたはデータベースの詳細については、こちらの包括的な資料リストを参照してください:データベースEdureka 。
MySQLの構造化されたトレーニングを受講したい場合は、MySQLDBA認定トレーニングを確認してください。 インストラクター主導のライブトレーニングと実際のプロジェクトの経験が付属しています。このトレーニングは、MySQLを深く理解し、主題をマスターするのに役立ちます。
質問がありますか? ” PL/SQLチュートリアルのコメントセクションで言及してください 」と返信します。