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

Oracle ストアド プロシージャの戻り値

王林
王林オリジナル
2023-05-08 10:40:371180ブラウズ

Oracle ストアド プロシージャは、開発者が外部アプリケーションに接続することなくデータベース内でコードを作成、テスト、実行できるため、プリコンパイルされた再利用可能なコード ブロックです。 Oracle ストアド プロシージャの主な利点の 1 つは、データベースのパフォーマンスとセキュリティが向上していることですが、値を返す必要がある場合には特別な処理が必要になります。

一部のストアド プロシージャは、更新操作の一部の通知操作など、値を返さずに一部の操作をトリガーするためにのみ使用される場合があるため、ストアド プロシージャの戻り値の特性は実際のビジネス ニーズに基づいています。ただし、他の場合には、ストアド プロシージャは数値、文字列、ブール値などの単純な値、または他の条件下ではコレクションやデータ テーブルを返す必要がある場合があります。

まず、ストアド プロシージャが単一の値を返す例を見てみましょう。

CREATE OR REPLACE PROCEDURE get_employee_count(p_department varchar2, p_employee_count out number) 
IS 
BEGIN 
    SELECT COUNT(*) INTO p_employee_count FROM employees WHERE department = p_department; 
END;

この例では、ストアド プロシージャは部門名パラメータを受け取り、部門内の従業員の合計数を返します。その部門。プロシージャ定義では、OUT パラメータを使用して結果を返します。主要部分では、SELECT クエリを実行し、結果を p_employee_count パラメータに保存します。

このストアド プロシージャを呼び出して戻り値を取得するには、次のコードを使用します。

DECLARE 
    v_employee_count NUMBER; 
BEGIN 
    get_employee_count('IT', v_employee_count); 
    DBMS_OUTPUT.PUT_LINE('Total Employees in IT department:'||v_employee_count); 
END; 

この例では、DECLARE ブロックを使用して変数 v_employee_count を定義し、それをストアド プロシージャに渡します。手順 。次に、本体セクションでストアド プロシージャを呼び出し、結果を出力に表示します。

ストアド プロシージャを使用して結果セットを返すことについては、別のテーブル/カーソル テクノロジを使用して処理することもできます。

CREATE OR REPLACE TYPE Employee AS OBJECT 
( 
    employee_id NUMBER(6), 
    first_name VARCHAR2(20), 
    salary NUMBER(8,2) 
); 

CREATE OR REPLACE TYPE EmployeeList AS TABLE OF Employee; 

CREATE OR REPLACE PROCEDURE get_employees(p_department VARCHAR2, p_employee_list OUT EmployeeList) 
IS 
BEGIN 
    SELECT Employee(EMPLOYEE_ID, FIRST_NAME, SALARY) BULK COLLECT INTO p_employee_list FROM employees WHERE department = p_department; 
END; 

DECLARE 
    v_employee_list EmployeeList; 
BEGIN 
    get_employees('IT', v_employee_list); 
    FOR i IN v_employee_list.first .. v_employee_list.LAST LOOP 
        DBMS_OUTPUT.PUT_LINE(v_employee_list(i).employee_id||' - '||v_employee_list(i).first_name); 
    END LOOP; 
END; 

この例では、employee という名前のオブジェクト タイプを定義します。これには、employee_id、first_name、および給与属性が含まれます。また、Employee オブジェクトのコレクションである EmployeeList タイプも定義します。最後に、部門名を受け取り、その部門の従業員のリストを返すストアド プロシージャ get_employees を作成しました。

ストアド プロシージャの本体で、SELECT クエリを実行し、BULK COLLECT INTO ステートメントを使用して結果セットを EmployeeList オブジェクトに変換します。

このストアド プロシージャを呼び出して結果セットを取得するには、次のコードを使用します:

DECLARE 
    v_employee_list EmployeeList; 
BEGIN 
    get_employees('IT', v_employee_list); 
    FOR i IN v_employee_list.FIRST .. v_employee_list.LAST LOOP 
        DBMS_OUTPUT.PUT_LINE(v_employee_list(i).employee_id||' - '||v_employee_list(i).first_name||' - '||v_employee_list(i).salary); 
    END LOOP; 
END; 

この例では、EmployeeList 型の変数 v_employee_list を定義し、それをストアド プロシージャに渡します。 get_employees。次に、FOR ループを使用してコレクションを反復処理し、各 Employee オブジェクトのプロパティを出力に表示します。

この記事では、個々の値や結果セットを返す方法など、Oracle ストアド プロシージャで値を返すさまざまな方法について説明しました。アプリケーションのニーズが何であっても、ストアド プロシージャは、再利用可能なコード ブロックを提供しながらデータベースのパフォーマンスとセキュリティを向上できる強力なツールです。

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

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