sql >> データベース >  >> RDS >> Database

PL / SQLチュートリアル:PL/SQLについて知っておくべきことすべて

    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チュートリアルのコメントセクションで言及してください 」と返信します。


    1. ASP.NETはSqlConnectionを使用してMySQLを接続します

    2. OracleSQLDeveloperを使用したデータモデルのリバースエンジニアリング

    3. MySQLでJoinを使用して削除

    4. PostgreSQLのシリアル疑似データ型の概要