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

OraclePLSQLのブロック構造とタイプ

    ここでは、OraclePLSQLのブロック構造とタイプについて説明します

    PL/SQLとは


    PL / SQLは、手続き型言語機能を可能にするOracle独自のSQL拡張機能です。データのカプセル化、例外処理、情報の隠蔽、オブジェクト指向など、最新のソフトウェアエンジニアリングのすべての機能を提供します

    PLSQLを使用する理由

    1)Oracleフォーム、レポートなどの開発ツールとの統合

    2)複数のステートメントを単一のplsqlブロックにグループ化して、Oracleサーバーに送信すると、ネットワークトラフィックが減少します

    3)モジュール化されたプログラム開発:複雑なロジック/問題を管理可能で明確に定義された論理モジュールのセットに分解し、ブロックを使用してそれらを実装します

    4)移植性:Oracleサーバーにネイティブであるため、簡単に移動できます

    5)if条件、ループなどの手続き型言語制御構造を提供します

    6)エラーを処理し、それに基づいて例外を発生させる機能があります

    PLSQLブロック構造

    plsqlブロックは、宣言、実行可能ファイル、および例外の3つのセクションで作成されます。

    DECLARE(オプション)– このセクションには、変数、定数、カーソル、およびユーザー定義の例外が含まれています。
    BEGIN(必須)

    実行可能ファイル– このセクションには、SQLステートメントが含まれています

    例外(オプション)- このセクションには、エラーハンドラが含まれています。

    END(必須);

    したがって、宣言と例外セクションはオプションです。

    ブロック構造の例

    DECLARE 
     l_number  NUMBER;
     BEGIN
     l_number := 1;
     Dbms_output.put_line(l_number);
     Exception
     When others then
     Dbms_output.put_line(‘Exception occurred’);
     END;
     /

    メモする重要なポイント

    1)すべての変数と定数はdeclareセクションで定義されています

    2)セミコロンを配置します; sqlステートメントまたはplsql制御ステートメントの最後

    3)PL / SQLでは、すべてのエラーはExceptionブロックで処理されます。

    4)BeginとEndは、PL/SQLブロックの開始と終了を示す必須の文です。

    5)変数と定数は、使用する前に最初に宣言する必要があります。

    6)値は、SELECT…INTOステートメントを介して、またはプロシージャからOUTまたはIN OUTパラメータとして使用される場合に、「:=」代入演算子を使用して変数に直接割り当てることができます。

    7)セクションキーワードDeclare、Begin、exceptionの後にセミコロンが続かない

    8)Endおよび他のすべてのplsqlステートメントでは、ステートメントを終了するためにセミコロンが必要です

    PLSQLブロックタイプ

    匿名 :匿名ブロックは名前のないブロックです。それらは、実行する必要があるアプリケーションのポイントで宣言されます

    DECLARE 
     l_number  NUMBER;
     BEGIN
     l_number := 1;
     Dbms_output.put_line(l_number);
     Exception
     When others then
     Dbms_output.put_line(‘Exception occurred’);
     END;
     /

    機能 :これらは、パラメータを受け入れ、関数を計算して返すことができるPLSQLブロックの名前です。 Oracleサーバーまたはアプリケーションに保存できます

    Syntax
    FUNCTION name [(parameter[, parameter, …])] RETURN datatype IS
     [local declarations]
     BEGIN
     executable statements
     [EXCEPTION exception handlers]
     END [name];
     Example
     Create or replace function FUNC return number
     As
     l_number  NUMBER;
     BEGIN
     Select count(*) into l_number  from emp;
     return(l_number)
     END;
     /

    手順 :これらは、パラメータを受け入れて一部の情報を処理し、値を返す場合と返す場合があるPLSQLブロックの名前です。 Oracleサーバーまたはアプリケーションに保存できます

    Syntax
     PROCEDURE name [(parameter[, parameter, …])] IS
     [local declarations]
     BEGIN
     executable statements
     [EXCEPTION exception handlers]
     END [name];
     Example
     Create or replace procedure  remove_emp (emp_id  number)
     As
     BEGIN
     Delete from emp where employee_id=emp_id;
     END;
     /
    機能と手順の違い
    機能 手順
    関数は値を返す必要があります 手順は必要ありません
    構文 構文
    関数名(引数リスト…..)戻り値のデータ型は 手順名(パラメータリスト…..)
    ローカル変数宣言
    開始 ローカル変数宣言
    実行可能ステートメント BEGIN
    例外 実行可能ステートメント。
    実行ハンドラー 例外。
    終了; 例外ハンドラー
    終了;
    関数はSQLで使用できますが制限があります プロシージャをSQLから直接呼び出すことはできません。

    OraclePLSQLブロックの構文とガイドライン

    1)文字と日付のリテラルは一重引用符で囲む必要があります

    2)/*と*/

    の間に複数行のコメントを配置します

    3)ほとんどのSQL関数はPLSQLで使用できます。SQLと同じようにPLSQLでchar、date、number関数を使用できます

    4)グループ化関数はPLSQLでは使用できません。 PLSQLのsqlステートメントでのみ使用できます

    5)コードを読みやすくするために、適切なインデントを使用する必要があります

    6)読みやすさとメンテナンスを向上させるために、DMLステートメントを大文字、PLSQLキーワード、データ型を大文字、Put識別子とパラメータを小文字で記述することをお勧めします。

    関連リンク

    OraclePLSQLのドキュメント
    最もよく聞かれる25のOraclePlSQLインタビューの質問
    Oraclesqlおよびplsql
    sqlクエリの記述方法


    1. Microsoft Accessデータベースを分割するとはどういう意味ですか?

    2. テーブルの設計中に1対1、1対多、および多対多の関係を実装するにはどうすればよいですか?

    3. PHPを使用して複数のMYSQLクエリを実行する

    4. MySQL/MariaDB用のAzureデータベースをオンプレミスサーバーに移行する