[Oracle] Oracle シリーズ 15 -- ストアド プロシージャ

過去問題の復習

序文

1. 基本的な考え方

(1) 定義

Oracleストアド・プロシージャは、入力パラメータと出力パラメータを使用して特定の機能を完了する一連のSQL文です。これらはコンパイルされてデータベースに保存されます。ユーザーは、ストアド・プロシージャの名前を指定し、パラメータを指定する(パラメータ付きなど)ことによって実行できます。 )。

ストアド プロシージャを使用すると、次のような利点があります。

パフォーマンスの向上: ストアド プロシージャはデータベース サーバー上で実行されるため、ネットワーク トラフィックとデータ転送時間が削減されます。また、一度コンパイルして複数回実行するため、アプリケーションの応答性も向上します。
データの保護: ストアド プロシージャを使用してデータベースを操作すると、SQL インジェクション攻撃や悪用などのセキュリティ問題を防ぐことができます。
コードを簡素化する: 一般的なタスクを 1 つのコード ブロックにカプセル化し、ストアド プロシージャに名前を付けると、アプリケーション内の繰り返しコードを簡素化できます。
メンテナンスの利便性: 一部のビジネス ロジックやクエリ条件を変更する必要がある場合、ストアド プロシージャを更新するだけで済みます。

(2) ストアドプロシージャと関数の違い

関数は 1 つの値のみを返すことができますが、ストアド プロシージャは複数の値を返すことができます。
関数は通常、式として使用されますが、ストアド プロシージャは通常、何らかのタスクを実行するために呼び出されます。
関数はデータベースの状態を変更できませんが、ストアド プロシージャは変更できます。

(3) ストアドプロシージャとトリガーの違い

トリガーは明示的に呼び出すことはできませんが、ストアド プロシージャは呼び出すことができます。
トリガーの実行は暗黙的ですが、ストアド プロシージャの実行は明示的です。
トリガーはテーブル レベルでのみ定義できますが、ストアド プロシージャはデータベース レベルで定義できます。

2. ストアド プロシージャを作成して使用する

(1) ストアドプロシージャを作成する

CREATE OR REPLACE PROCEDURE my_procedure
AS
BEGIN
-- 执行 SQL 语句或其他任务
END;

CREATE OR REPLACE は、ストアド プロシージャが既に存在する場合、それを新しいコードに置き換えることを意味します。
AS キーワードは、ストアド プロシージャの本体の定義の始まりを示します。
ストアド プロシージャは END で終了する必要があります。

(2) ストアドプロシージャを呼び出す

EXECUTE または CALL コマンドを使用してストアド プロシージャを呼び出します。

例えば

EXECUTE my_procedure;

または:

CALL my_procedure();

ストアド プロシージャに入力パラメータが必要な場合は、括弧内にパラメータ値を指定できます。

例えば

EXECUTE my_procedure('John', 'Doe');

(3) ストアドプロシージャの入力パラメータ

Oracle ストアド プロシージャは、実行時にプログラムにデータを渡すことを可能にする入力パラメータを受け取ることができます。入力パラメータを宣言するには、IN キーワードを使用し、その後にパラメータ名とデータ型を指定します。パラメータ名は明確で理解しやすいものにし、データ型は渡された値と一致する必要があります。

例えば

CREATE OR REPLACE PROCEDURE my_procedure (p_name VARCHAR2, p_age NUMBER)
AS
BEGIN
-- 执行 SQL 查询或其他任务
END;

(4) ストアドプロシージャの出力パラメータ

Oracle ストアド プロシージャは、出力パラメータと呼ばれる 1 つ以上の結果を返すこともできます。出力パラメータを宣言するには、OUT キーワードの後に​​パラメータ名とデータ型を使用します。出力パラメータにはストアド プロシージャ本体の値を割り当てる必要があり、ストアド プロシージャ呼び出しには、出力値を受け取るための対応する変数が含まれている必要があります。

例えば

CREATE OR REPLACE PROCEDURE my_procedure (p_name VARCHAR2, p_age NUMBER, p_result OUT VARCHAR2)
AS
BEGIN
-- 执行 SQL 查询或其他任务,并将结果存储在 p_result 变量中。
END;

3. ストアド プロシージャのベスト プラクティス

例: 従業員IDに基づいて従業員の名前と給与を出力します。

CREATE OR REPLACE PROCEDURE get_employee_info (p_emp_id IN NUMBER, p_name OUT VARCHAR2, p_salary OUT NUMBER)
AS
BEGIN
  SELECT employee_name, salary INTO p_name, p_salary FROM employees WHERE employee_id = p_emp_id;
EXCEPTION
  WHEN no_data_found THEN
    p_name := 'Unknown';
    p_salary := 0;
END;

たとえば、ストアド プロシージャを使用して 100 万件のレコードを生成します。

CREATE OR REPLACE Procedure FILL_TS
As
nbid1 Number(100);
Begin
For nbid1 In 1..10000000 Loop
Insert Into ts_insert(nbid,mc) Values(nbid1,nbid1);
End Loop;
Commit;
End;

おすすめ

転載: blog.csdn.net/u011397981/article/details/133500848