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 サイトの他の関連記事を参照してください。