PL / SQL-プロシージャ
この章では、PL / SQLのプロシージャについて説明します。Asubprogram特定のタスクを実行するプログラムユニット/モジュールです。これらのサブプログラムを組み合わせて、より大きなプログラムを形成します。これは基本的に「モジュラーデザイン」と呼ばれます。サブプログラムは、別のサブプログラムまたはプログラムと呼ばれるプログラムによって呼び出すことができます。calling program。
サブプログラムを作成できます-
- スキーマレベルで
- パッケージ内
- PL / SQLブロック内
スキーマレベルでは、サブプログラムは standalone subprogram。これは、CREATEPROCEDUREまたはCREATEFUNCTIONステートメントで作成されます。これはデータベースに保管され、DROPPROCEDUREまたはDROPFUNCTIONステートメントで削除できます。
パッケージ内に作成されたサブプログラムは packaged subprogram。これはデータベースに保管されており、DROPPACKAGEステートメントでパッケージが削除された場合にのみ削除できます。この章でパッケージについて説明します'PL/SQL - Packages'。
PL / SQLサブプログラムは、パラメータのセットを使用して呼び出すことができるPL / SQLブロックと呼ばれます。PL / SQLは2種類のサブプログラムを提供します-
Functions−これらのサブプログラムは単一の値を返します。主に値を計算して返すために使用されます。
Procedures−これらのサブプログラムは値を直接返しません。主にアクションを実行するために使用されます。
この章では、の重要な側面について説明します。 PL/SQL procedure。私たちは議論する予定ですPL/SQL function 次の章で。
PL / SQLサブプログラムの一部
各PL / SQLサブプログラムには名前があり、パラメータリストがある場合もあります。匿名のPL / SQLブロックと同様に、名前付きブロックにも次の3つの部分があります。
S.No | 部品と説明 |
---|---|
1 | Declarative Part オプションパーツです。ただし、サブプログラムの宣言部分はDECLAREキーワードで始まりません。これには、型、カーソル、定数、変数、例外、およびネストされたサブプログラムの宣言が含まれています。これらの項目はサブプログラムに対してローカルであり、サブプログラムが実行を完了すると存在しなくなります。 |
2 | Executable Part これは必須の部分であり、指定されたアクションを実行するステートメントが含まれています。 |
3 | Exception-handling これもオプションパーツです。実行時エラーを処理するコードが含まれています。 |
プロシージャの作成
プロシージャは、 CREATE OR REPLACE PROCEDUREステートメント。CREATE OR REPLACEPROCEDUREステートメントの簡略化された構文は次のとおりです。
CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] type [, ...])]
{IS | AS}
BEGIN
< procedure_body >
END procedure_name;
どこ、
procedure-nameは、プロシージャーの名前を指定します。
[OR REPLACE]オプションを使用すると、既存のプロシージャを変更できます。
オプションのパラメータリストには、パラメータの名前、モード、およびタイプが含まれています。 IN は外部から渡される値を表し、OUTはプロシージャの外部で値を返すために使用されるパラメータを表します。
procedure-bodyには、実行可能部分が含まれています。
スタンドアロンプロシージャを作成するために、ISキーワードの代わりにASキーワードが使用されます。
例
次の例では、文字列「HelloWorld!」を表示する簡単なプロシージャを作成します。実行時に画面に表示されます。
CREATE OR REPLACE PROCEDURE greetings
AS
BEGIN
dbms_output.put_line('Hello World!');
END;
/
上記のコードをSQLプロンプトを使用して実行すると、次の結果が生成されます。
Procedure created.
スタンドアロン手順の実行
スタンドアロンプロシージャは、2つの方法で呼び出すことができます-
を使用して EXECUTE キーワード
PL / SQLブロックからプロシージャの名前を呼び出す
上記の手順 'greetings' EXECUTEキーワードを使用して-として呼び出すことができます
EXECUTE greetings;
上記の呼び出しは表示されます-
Hello World
PL/SQL procedure successfully completed.
プロシージャは、別のPL / SQLブロックから呼び出すこともできます-
BEGIN
greetings;
END;
/
上記の呼び出しは表示されます-
Hello World
PL/SQL procedure successfully completed.
スタンドアロンプロシージャの削除
スタンドアロンプロシージャは、 DROP PROCEDUREステートメント。プロシージャを削除するための構文は次のとおりです。
DROP PROCEDURE procedure-name;
次のステートメントを使用して、グリーティング手順を削除できます。
DROP PROCEDURE greetings;
PL / SQLサブプログラムのパラメータモード
次の表に、PL / SQLサブプログラムのパラメータモードを示します。
S.No | パラメータモードと説明 |
---|---|
1 | IN INパラメーターを使用すると、サブプログラムに値を渡すことができます。 It is a read-only parameter。サブプログラム内では、INパラメーターは定数のように機能します。値を割り当てることはできません。定数、リテラル、初期化変数、または式をINパラメーターとして渡すことができます。デフォルト値に初期化することもできます。ただし、その場合はサブプログラム呼び出しから省略されます。It is the default mode of parameter passing. Parameters are passed by reference。 |
2 | OUT OUTパラメータは、呼び出し元のプログラムに値を返します。サブプログラム内では、OUTパラメータは変数のように機能します。値を変更し、割り当てた後で値を参照できます。The actual parameter must be variable and it is passed by value。 |
3 | IN OUT アン IN OUTパラメータは初期値をサブプログラムに渡し、更新された値を呼び出し元に返します。値を割り当てたり、値を読み取ったりすることができます。 IN OUT仮パラメータに対応する実際のパラメータは、定数や式ではなく、変数である必要があります。正式なパラメータには値を割り当てる必要があります。Actual parameter is passed by value. |
IN&OUTモードの例1
このプログラムは、最小2つの値を見つけます。ここで、プロシージャはINモードを使用して2つの数値を取り、OUTパラメータを使用してそれらの最小値を返します。
DECLARE
a number;
b number;
c number;
PROCEDURE findMin(x IN number, y IN number, z OUT number) IS
BEGIN
IF x < y THEN
z:= x;
ELSE
z:= y;
END IF;
END;
BEGIN
a:= 23;
b:= 45;
findMin(a, b, c);
dbms_output.put_line(' Minimum of (23, 45) : ' || c);
END;
/
上記のコードをSQLプロンプトで実行すると、次の結果が生成されます。
Minimum of (23, 45) : 23
PL/SQL procedure successfully completed.
IN&OUTモードの例2
このプロシージャは、渡された値の値の2乗を計算します。この例は、同じパラメーターを使用して値を受け入れ、別の結果を返す方法を示しています。
DECLARE
a number;
PROCEDURE squareNum(x IN OUT number) IS
BEGIN
x := x * x;
END;
BEGIN
a:= 23;
squareNum(a);
dbms_output.put_line(' Square of (23): ' || a);
END;
/
上記のコードをSQLプロンプトで実行すると、次の結果が生成されます。
Square of (23): 529
PL/SQL procedure successfully completed.
パラメータを渡すためのメソッド
実際のパラメータは3つの方法で渡すことができます-
- 位置表記
- 名前付き表記
- 混合表記
位置表記
位置表記では、プロシージャを次のように呼び出すことができます。
findMin(a, b, c, d);
位置表記では、最初の実パラメータが最初の仮パラメータに置き換えられます。2番目の実パラメータが2番目の仮パラメータに置き換えられ、以下同様に続きます。そう、a の代わりに x, b の代わりに y, c の代わりに z そして d の代わりに m。
名前付き表記
名前付き表記では、実際のパラメーターは、を使用して仮パラメーターに関連付けられます。 arrow symbol ( => )。プロシージャコールは次のようになります-
findMin(x => a, y => b, z => c, m => d);
混合表記
混合表記では、プロシージャコールで両方の表記を混合できます。ただし、位置表記は名前付き表記の前に置く必要があります。
次の呼び出しは合法です-
findMin(a, b, c, m => d);
ただし、これは合法ではありません。
findMin(x => a, b, c, d);