宣言セクションで指定されたPROCEDURE句は、そのブロックにローカルなサブプロシージャを定義し、名前を付けます。
ブロックという用語は、オプションの宣言セクション、必須の実行可能セクション、およびオプションの例外セクションからなるSPLブロック構造を指します。 ブロックは、スタンドアロンのプロシージャと関数、匿名ブロック、サブプログラム、トリガー、パッケージ、およびオブジェクト型メソッドの構造です。
フレーズ識別子はブロックに対してローカルであるは、識別子 (つまり、変数、カーソル、タイプ、またはサブプログラム) がそのブロックの宣言セクション内で宣言され、したがって、そのブロックの実行可能セクションおよびオプションの例外セクション内のSPLコードによってアクセス可能であることを意味します。
サブプロシージャは、宣言セクションに含まれる他のすべての変数、カーソル、および型宣言の後にのみ宣言できます。
PROCEDURE name [ (パラメータ) ]{ IS | AS}
[ PRAGMA AUTONOMOUS_TRANSACTION; ]
[ declarations ]
BEGIN
statements
END [ name ]; 引数
| 引数 | 説明 |
| name | nameはサブプロシージャの識別子です。 |
| parameters | parameters は、仮パラメーターのリストです。 |
| PRAGMA AUTONOMOUS_TRANSACTION | PRAGMA AUTONOMOUS_TRANSACTIONは、サブプロシージャを自律トランザクションとして設定するディレクティブです。 |
| declarations | 宣言は、変数、カーソル、型、またはサブプログラムの宣言です。 サブプログラム宣言が含まれている場合は、他のすべての変数、カーソル、および型宣言の後に宣言する必要があります。 |
| statements | statements は 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を追加しました