Oracle ストアド プロシージャは、必要に応じて呼び出して実行できる、コンパイル済みの PL/SQL コードです。ストアド プロシージャは、一部のビジネス ロジックをカプセル化し、SQL の実行効率を向上させ、インターフェイスを呼び出すことで複雑な操作を単純な操作にカプセル化することができるため、データベース アプリケーションの保守性と信頼性が向上します。この記事では、Oracle ストアド プロシージャの構文を詳しく紹介します。
Oracle ストアド プロシージャの作成
Oracle では、ストアド プロシージャを作成する主な方法が 2 つあります。1 つは CREATE PROCEDURE ステートメントを使用してストアド プロシージャを作成する方法で、もう 1 つはストアド プロシージャを作成するための PL/SQL ツール。ストアド プロシージャ。
CREATE PROCEDURE ステートメントを使用してストアド プロシージャを作成するための構文は次のとおりです。
CREATE [OR REPLACE] PROCEDURE プロシージャ名
(パラメータ名 [IN | OUT | IN OUT] データ型, ...)
IS
[DECLARATIONS]
BEGIN
ステートメント
[EXCEPTION]
例外処理ステートメント
END [procedure_name];
このうち、CREATE PROCEDURE はストアド プロシージャのステートメントを作成します。OR REPLACE はオプションのキーワードで、ストアド プロシージャが既に存在する場合は置換することを示します。procedure_name はストアド プロシージャの名前です。parameter_name は入力および出力パラメータです。ストアド プロシージャの名前; data_type はパラメータのデータ型; IS ストアド プロシージャのヘッダーの終了記号; DECLARATIONS はオプションの変数または定数の宣言セクション; BEGIN と END の間はストアド プロシージャの本体、これには SQL 文と PL/SQL コードが含まれます。
PL/SQL ツールを使用してストアド プロシージャを作成するプロセスは次のとおりです:
パラメータの受け渡し
Oracle ストアド プロシージャは、入力パラメータ、出力パラメータ、または入出力パラメータなどのパラメータを受け取ったり返したりできます。入力パラメータはストアド プロシージャで渡されるパラメータ値であり、出力パラメータはストアド プロシージャで計算された結果値であり、入力パラメータと出力パラメータは同時に入力パラメータと出力パラメータの役割を果たします。
ストアド プロシージャのパラメータを定義する場合は、パラメータ名、データ型、およびパラメータの方向 (IN、OUT または IN OUT) を指定する必要があります。例:
CREATE OR REPLACE PROCEDURE emp_salary_increase
(emp_id IN NUMBER、increase_percent IN NUMBER、new_salary OUT NUMBER)
IS
BEGIN
SELECT給与 (salary * (increase_percent/100) ) ) INTO new_salary FROMemployees WHEREemployee_id = emp_id;
END;
この例では、ストアド プロシージャ emp_salary_increase は 3 つのパラメータを受け取り、emp_id と増加_percent は入力パラメータ、new_salary は出力パラメータです。
ストアド プロシージャのパラメータを参照する場合、パラメータ名の前にストアド プロシージャ名の省略形を追加する必要があります。例:
emp_salary_increase(100, 10, :new_salary);
上記のコードでは、100 と 10 は emp_id と raise_percent のパラメータ値で、:new_salary はストアド プロシージャのパラメーター値によって計算された new_salary 出力。
条件分岐とループ構造
他のプログラミング言語と同様、Oracle ストアド プロシージャも条件分岐とループ構造をサポートします。一般的な分岐ステートメントには IF-THEN、IF-THEN-ELSE、CASE ステートメントが含まれ、ループ ステートメントには WHILE ステートメントと FOR ステートメントが含まれます。
IF-THEN ステートメントの構文は次のとおりです。
IF 条件 THEN
-- ステートメント ブロックを実行します
END IF;
この例では、 , if 条件 値が TRUE の場合、ステートメント ブロックが実行されます。
IF-THEN-ELSE ステートメントの構文は次のとおりです。
IF 条件 THEN
-- ステートメント ブロックを実行します。
ELSE
-- 別のステートメント ブロックを実行します。
END IF;
この例では、条件の値が TRUE の場合は最初のステートメント ブロックが実行され、それ以外の場合は 2 番目のステートメント ブロックが実行されます。
CASE ステートメントの構文は次のとおりです。
CASE case_expression
WHEN when_expression THEN
-- execute statement block
WHEN when_expression THEN
-- execute another statement block
ELSE
-- default block
END CASE;
この例では、case_expression は CASE ステートメントの比較式、when_expression は CASE ステートメントの条件式です。WHEN 分岐は複数存在する場合があります。
WHILE ループの構文は次のとおりです。
WHILE 条件 LOOP
-- ステートメント ブロックを実行します
END LOOP;
この例では、 while ループは条件に従う 式の結果はステートメントのブロックをループします。
FOR ループの構文は次のとおりです。
FOR インデックス IN [REVERSE] lower_bound..upper_bound LOOP
-- ステートメント ブロックを実行します
END LOOP;
この例では、index は整数変数、 lower_bound と upper_bound はそれぞれループの開始値と終了値です。 REVERSE キーワードを使用すると、ループは上位から下位に反復されます。
例外処理
Oracle ストアド プロシージャでは、例外が発生した場合、可能な限り適切に処理する必要があります。例外処理を考慮しないと、ストアド プロシージャが実行を完了できなかったり、さまざまな問題が発生したりする可能性があります。
例外処理は、EXCEPTION ステートメント ブロックを使用して完了できます。このステートメント ブロックには、さまざまな例外状況でさまざまな処理操作を実行する 1 つ以上の WHEN-THEN ブロックが含まれています。各 WHEN-THEN ブロックでは、例外名と対応する例外処理操作を指定する必要があります。例えば:###
DECLARE
emp_id NUMBER(10);
emp_salary NUMBER(10, 2);
BEGIN
SELECT salary INTO emp_salary FROM employees WHERE employee_id = emp_id;
EXCEPTION
WHEN no_data_found THEN
emp_id := NULL;
WHEN others THEN
RAISE;
END;
在这个例子中,如果SELECT语句找不到数据行,则没有找到数据的异常被捕获。异常处理程序将赋值NULL值到emp_id变量。如果有其他未知异常,则使用RAISE语句继续抛出异常。
结论
本文介绍了Oracle存储过程的语法,包括创建存储过程、参数传递、条件分支、循环结构和异常处理。了解Oracle存储过程的语法和使用方法可以让你更好地利用Oracle数据库的强大功能,提高开发效率和应用程序的可靠性。
以上がOracle ストアド プロシージャの構文の詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。