すべてのプロダクト
Search
ドキュメントセンター

PolarDB:サブプロシージャの作成

最終更新日:May 30, 2024

宣言セクションで指定されたPROCEDURE句は、そのブロックにローカルなサブプロシージャを定義し、名前を付けます。

ブロックという用語は、オプションの宣言セクション、必須の実行可能セクション、およびオプションの例外セクションからなるSPLブロック構造を指します。 ブロックは、スタンドアロンのプロシージャと関数、匿名ブロック、サブプログラム、トリガー、パッケージ、およびオブジェクト型メソッドの構造です。

フレーズ識別子はブロックに対してローカルであるは、識別子 (つまり、変数、カーソル、タイプ、またはサブプログラム) がそのブロックの宣言セクション内で宣言され、したがって、そのブロックの実行可能セクションおよびオプションの例外セクション内のSPLコードによってアクセス可能であることを意味します。

サブプロシージャは、宣言セクションに含まれる他のすべての変数、カーソル、および型宣言の後にのみ宣言できます。

PROCEDURE name [ (パラメータ) ]{ IS | AS}
    [ PRAGMA AUTONOMOUS_TRANSACTION; ]
    [ declarations ]
  BEGIN
    statements
  END [ name ]; 

引数

引数説明
namenameはサブプロシージャの識別子です。
parametersparameters は、仮パラメーターのリストです。
PRAGMA AUTONOMOUS_TRANSACTIONPRAGMA AUTONOMOUS_TRANSACTIONは、サブプロシージャを自律トランザクションとして設定するディレクティブです。
declarations宣言は、変数、カーソル、型、またはサブプログラムの宣言です。 サブプログラム宣言が含まれている場合は、他のすべての変数、カーソル、および型宣言の後に宣言する必要があります。
statementsstatements は SPL プログラム文です (BEGIN-END ブロックには EXCEPTION セクションが含まれる場合があります)。

次の例は、匿名ブロック内のサブプロシージャです。

DECLARE
    手順list_emp
    IS
        v_empno番号 (4);
        v_ename VARCHAR2(10);
        CURSOR emp_cur IS
            SELECT empno, ename FROM emp ORDER BY empno;
    BEGIN
        OPEN emp_cur;
        DBMS_OUTPUT.PUT_LINE('Subprocedure list_emp:');
        DBMS_OUTPUT.PUT_LINE('EMPNO    ENAME');
        DBMS_OUTPUT.PUT_LINE('-----    -------');
        LOOP
            FETCH emp_cur INTO v_empno, v_ename;
            EXIT WHEN emp_cur%NOTFOUND;
            DBMS_OUTPUT.PUT_LINE(v_empno || '     ' || v_ename);
        END LOOP;
        CLOSE emp_cur;
    エンド;
開始
    list_emp;
エンド; 

この匿名ブロックを呼び出すと、次の出力が生成されます。

サブプロシージャlist_emp:
EMPNO ENAME
----- -------
7369スミス
7499アレン
7521ワード
7566ジョーンズ
7654マーティン
7698 BLAKE
7782 CLARK
7788スコット
7839キング
7844ターナー
7876アダムス
7900ジェームズ
7902フォード
7934ミラー 

次の例は、トリガー内のサブプロシージャです。

トリガーの作成または交換dept_audit_trig
    部門の挿入または更新または削除後
DECLARE
    v_action        VARCHAR2(24);
    PROCEDURE display_action (
        p_actionでVARCHAR2
    )
    IS
    BEGIN
        DBMS_OUTPUT.PUT_LINE('User '| | USER | |' | | p_action | |
            'dept on' | | TO_CHAR(SYSDATE、'YYYY-MM-DD '));
    END display_action;
開始
    IF INSERTING THEN
        v_action := 'added';
    ELSIF UPDATING THEN
        v_action := 'updated';
    ELSIF DELETING THEN
        v_action := 'deleted';
    END IF;
    display_action(v_action);
エンド; 

このトリガーを呼び出すと、次の出力が生成されます。

はdeptの価値に挿入します (50、'HR' 、'DENVER');

ユーザーpolardbは2016-07-26
にdeptを追加しました