ホームページ  >  記事  >  データベース  >  Oracle ストアド プロシージャの例

Oracle ストアド プロシージャの例

WBOY
WBOYオリジナル
2023-05-11 11:13:062220ブラウズ

ストアド プロシージャは、必要に応じて呼び出すことができる SQL ステートメントと制御ステートメントのセットを含む、プリコンパイルされたデータベース プログラムです。この記事では、Oracleデータベースのストアドプロシージャの基礎知識と事例を紹介します。

1. ストアド プロシージャの基本

1.1 ストアド プロシージャの利点

ストアド プロシージャは、データベースのパフォーマンスを向上させる効果的な方法です。 SQL ステートメントはデータベース側でプリコンパイルされ、呼び出し時に操作をより迅速に完了できるため、アプリケーションとデータベースの対話の効率が向上します。また、データベース内のデータを作成および変更する前にストアド プロシージャで権限チェックを実行できるため、データのセキュリティも向上します。

1.2 ストアド プロシージャの作成

Oracle SQL 開発ツールを使用してストアド プロシージャを作成できます。 Oracle SQL DeveloperとSQL Plusは一般的に使用されるツールです。

ストアド プロシージャを作成するための基本的な構文は次のとおりです。

CREATE [OR REPLACE] PROCEDURE プロシージャ名
([パラメータ名 IN/OUT データ型 [, パラメータ名 IN/OUT データ型 …] ])
IS
BEGIN
ステートメント;
EXCEPTION
Exception_handler;
END;

パラメータはオプションです。「[OR REPLACE]」コマンドアプリケーションが存在し、ストアド プロシージャの状態を保持する必要があることを指定できます。

1.3 ストアド プロシージャの入力パラメータと出力パラメータ

ストアド プロシージャは、入力パラメータと出力パラメータを受け入れることができます。入力パラメーターを使用して、ストアド プロシージャ内で条件付き操作を実行したり、ストアド プロシージャにデータを渡したりできます。出力パラメータは、出力プロセスで値や指定された値などの情報を返すために使用されます。

一部のパラメーターの相互作用は次のとおりです。

IN: 入力パラメーターは、ストアド プロシージャに値を渡すために使用されます。

OUT: 出力パラメーターは入力データには使用されませんが、ストアド プロシージャを通じて値を返すことができます。

INOUT: 入出力パラメータを使用すると、値をパラメータとして渡し、ストアド プロシージャの実行戻り値を通じて変更できます。

1.4 ストアド プロシージャの例外処理

ストアド プロシージャは関数と同様に例外を処理できます。ストアド プロシージャでエラーが発生した場合、例外処理を設定できます。カスタム エラー メッセージの管理を実装し、エラー発生時に指定された動作を使用してこれらのエラーを送信できます。

次に、例外処理を作成するための基本的な構文を示します。

DECLARE
例外名 EXCEPTION;
PRAGMA EXCEPTION_INIT (例外名, エラーコード);
BEGIN
ステートメント( s) ;
EXCEPTION

  WHEN exception_name THEN
     statement(s);

END;

2. ストアド プロシージャの例

次に、一般的なストアド プロシージャの例をいくつか示します:

2.1 ストアド プロシージャプロシージャ 単純なクエリ

次は、テーブル内の条件を満たすデータを出力する単純なストアド プロシージャの例です。

CREATE OR REPLACE PROCEDURE get_emp_data
(
ID IN NUMBER,
NAME OUT VARCHAR2,
SALARY OUT NUMBER
)
IS
BEGIN
SELECT 従業員名,給与 INTO NAME,SALARY FROM 従業員 WHERE 従業員 ID = ID;
END;

上記のストアド プロシージャ インスタンスは 2 つのパラメータを渡す必要があります: ID は必須の入力パラメータであり、情報をクエリする従業員 ID を定義します。一方、名前と給与は値を受け入れる出力パラメータです。クエリ結果の対応する列。

ストアド プロシージャの出力パラメータの値を取得するには、関数のようにストアド プロシージャを呼び出すことができます。

DECLARE
emp_name VARCHAR2(20);
emp_salary NUMBER (10,2);
BEGIN
get_emp_data (100,emp_name,emp_salary);
DBMS_OUTPUT.PUT_LINE('名前: ' || emp_name);
DBMS_OUTPUT.PUT_LINE('給与: ' | | emp_salary);
END;

上記のコードでは、ストアド プロシージャのパラメーター ID が 100 に設定されているため、従業員の名前と給与が返されます。

2.2 ストアド プロシージャの挿入操作

次は、指定された従業員名簿にデータ行を挿入する関数を実装するストアド プロシージャの例です。

プロシージャの作成または置換 add_employee
(
ID 番号,
名前 VARCHAR2,
年齢 番号,
給与 番号
)
IS
BEGIN
INSERT INTO 従業員の値 (ID,NAME,AGE,SALARY);
COMMIT;
DBMS_OUTPUT.PUT_LINE('従業員が追加されました。');
EXCEPTION
WHEN OTHERS THEN

DBMS_OUTPUT.PUT_LINE('Error adding employee.');

END;

上記のストアド プロシージャの例では、従業員 ID、従業員名、従業員の年齢、従業員の給与という 4 つの入力パラメータが必要で、それらを「employees」テーブルに挿入します。挿入が成功すると、「従業員が追加されました」というメッセージが表示され、挿入が失敗すると、「従業員の追加中にエラーが発生しました」というメッセージが表示されます。

2.3 ストアド プロシージャの更新操作

次の例では、employee テーブル内の指定された ID を持つ従業員の給与を 10% 増やす関数を提供します。

CREATEまたは、プロシージャを置き換えます増加_employee_salary
(
ID IN NUMBER
)
IS
カーソル c_employee_salary IS

SELECT salary FROM employees WHERE employee_id = ID;

v_employee_salary NUMBER;
BEGIN
OPEN c_employee_salary;
FETCH c_employee_salary INTO v_employee_salary;
v_employee_salary := v_employee_salary * 1.1;
UPDATE 従業員 SET給与 = v_employee_salary WHEREemployee_id = ID;
COMMIT;
DBMS_OUTPUT.PUT_LINE('給与が増加しました。');
例外
NO_DATA_FOUND の場合

DBMS_OUTPUT.PUT_LINE('Employee not found.');

その他の場合

DBMS_OUTPUT.PUT_LINE('Error increasing salary.');

END;

上記のストアド プロシージャの例には、1 つの入力パラメータ (従業員 ID) が必要です。従業員 ID に基づいて従業員の給与を取得し、1.1 を乗算してテーブルに更新します。正しく更新された場合は「給与が増加しました」というメッセージが表示され、従業員が見つからない場合は「従業員が見つかりません」というメッセージが表示され、その他のエラーが発生した場合は「給与増加エラー」というメッセージが表示されます。

概要

この記事では、Oracle データベース ストアド プロシージャの基本といくつかの例を紹介しました。ストアド プロシージャはデータベースのパフォーマンスとデータ セキュリティを向上させることができ、頻繁に実行する必要があるタスクに非常に役立ちます。いくつかの例を通じて、Oracle ストアド プロシージャの作成方法と使用方法をより深く理解できます。

以上がOracle ストアド プロシージャの例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。