Oracle のストアド プロシージャと関数の違いは何ですか

青灯夜游
リリース: 2022-02-22 18:38:55
オリジナル
8874 人が閲覧しました

違い: 1. ストアド プロシージャはデータベース内の特定の操作またはタスクを完了するために使用されますが、関数は特定のデータに使用されます; 2. ストアド プロシージャのプログラム ヘッダーは PROCEDURE で宣言され、戻り値の型はありません関数のプログラムヘッダはFUNCTIONで宣言されており、宣言時に戻り値の型を記述する必要があります。

Oracle のストアド プロシージャと関数の違いは何ですか

このチュートリアルの動作環境: Windows 7 システム、Oracle 11g バージョン、Dell G3 コンピューター。

ストアド プロシージャ

ストアド プロシージャ (ストアド プロシージャ) は、特定の関数を完了するための SQL ステートメントのセットです。コンパイルされ、データベースの真ん中。ユーザーは、ストアド プロシージャの名前を指定し、パラメーターを指定することによって (ストアド プロシージャにパラメーターがある場合)、ストアド プロシージャを実行します。ストアド プロシージャはデータベース内の重要なオブジェクトであり、適切に設計されたデータベース アプリケーションではストアド プロシージャを使用する必要があります。ストアド プロシージャは、フロー制御と SQL ステートメントによって記述されたプロシージャです。このプロシージャはコンパイルおよび最適化されてデータベース サーバーに格納され、アプリケーション プログラムが使用するときにのみ呼び出す必要があります。 ORACLE では、いくつかの関連プロシージャを組み合わせてプログラム パッケージを形成できます。

利点:

1. ストアド プロシージャは作成時にのみコンパイルされるため、今後実行されるたびにストアド プロシージャを再コンパイルする必要はありません。ただし、一般的な SQL ステートメントは実行されるたびにコンパイルされますが、コンパイルは 1 回だけなので、ストアド プロシージャを使用するとデータベースの実行速度が向上します。

2. データベースに対して複雑な操作 (複数のテーブルに対する更新、挿入、クエリ、削除など) を実行する場合、この複雑な操作をストアド プロシージャにカプセル化し、ストアド プロシージャによって提供されるトランザクション処理と組み合わせることができます。データベースを使用します。

3. ストアド プロシージャは再利用できるため、データベース開発者の作業負荷を軽減できます。

4. セキュリティが高く、指定したストアドプロセスを特定のユーザーのみが使用できるように設定できます。

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

#両者の最大の違いは次のとおりです:

1 ). 関数は常に呼び出し元にデータを返し、通常は値のみを返します; 2). ストアド プロシージャ (プロシージャ) はデータを直接返すことはありませんが、出力パラメータの値を変更することができ、これはおおよそ返すものとみなすことができます。値。ストアド プロシージャの出力パラメータの値の数に制限はありません。

一般的なアプリケーションの観点から、戻り値が必要ない場合、または複数の戻り値が必要な場合はストアド プロシージャを使用し、戻り値が 1 つだけの場合は関数を使用します。

2. 関数定義には DDL (select など) ステートメントのみを含めることができます。DML ステートメントは主にプロシージャに含まれます (更新、挿入、データベース上で複雑な操作を実行する場合)。複数のテーブルに対するクエリと削除) )。

select の結果セットを使用したい場合は、カーソルを使用する必要があります。


データベース内の特定の操作またはタスク (挿入、削除など) を完了するために使用されます # # 特定のデータに使用 (クエリの戻り値など) プログラムヘッダ宣言で PROCEDURE を使用します使用プログラム ヘッダー宣言の FUNCTIONプログラム ヘッダー宣言時に戻り値の型は必要ありません 戻り値の型プログラム ヘッダーおよび PL/SQL を宣言するときに記述する必要があります。ブロックには有効な RETURN ステートメントが少なくとも 1 つ含まれている必要がありますIN/OUT/IN OUT を使用できます3 つのパラメータ モード IN/OUT/IN OUT の 3 つのパラメータ モードが使用可能独立した PL/SQL ステートメント独立して実行することはできません。式の一部として呼び出す必要があります戻り値を返すことができますOUT/IN OUTを介した 0 個以上の値 RETURN ステートメントは値を返し、その値は宣言部分と一致します。OUT 型パラメータを介して変数を取り出すこともできますSQL ステートメント ストアド プロシージャは (DML または SELECT) では呼び出すことができません。

Oracle のストアド プロシージャと関数の違いは何ですか

#実際の例

1. 関数

(1) 関数の作成

create or replace function get_salary(
    dept_no number,
    emp_count **out** number)
    return number IS
    v_sum number;begin
    ...exception    ...end get_salary
ログイン後にコピー

(2) 関数

declare 
    v_num number;
    v_sum number;begin
    ...(这里应该出现函数名表示调用)end
ログイン後にコピー

2 の呼び出し、ストアド プロシージャ

(1) ストアド プロシージャの作成

create or replace procedure pro_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...
exception
    ...
end proc_demo;
ログイン後にコピー

(2) ストアド プロシージャ

呼び出し構文:

1)、exec <プロセス名>;

2)、execute <プロセス名>;

3)、PL/SQL内で直接呼び出されます。ステートメントブロック内。

例:

declare
    v_num number;
    v_sum number(8,2);
begin
    procedure pro_demo(dept_no=>1,sal_num=>900,emp_count=>10)(这里出现存储过程名表示调用,传递参数值用=>)
end;
ログイン後にコピー

3. ローカル ストアド プロシージャ

PL/SQL では、宣言ブロックでローカル ストアド プロシージャを作成することもできます。キーワード create を使用する目的は、ストアド プロシージャをデータベースに保存せず、データベースの変更によって引き起こされるトラブルを回避することです。その主な使用シナリオは、ストアド プロシージャを将来何度も再利用するのではなく、一時的に使用することです。 。

例:

declare
    v_num number;
    v_sum number(8,2);
procedure proc_demo(
    dept_no number default 10,
    sal_sum out number,
    emp_count out number)
IS
begin
    ...(这里不用出现存储过程名)
exception
    ...
end proc_demo;
ログイン後にコピー

推奨チュートリアル: 「

Oracle チュートリアル

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

関数

SQL ステートメントでは関数を呼び出すことができます ( DML または SELECT)

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート