DEFAULT 句を含めるか、CREATE PROCEDURE 文または CREATE FUNCTION 文で代入演算子 (:=) を使用することで、仮引数のデフォルト値を設定できます。

仮引数を宣言する一般的な形式は次のとおりです。

(name [ IN|OUT|IN OUT ] data_type [{DEFAULT | := } expr ])
  • name はパラメーターに割り当てる識別子です。
  • IN|OUT|IN OUT で、パラメーターモードを指定します。
  • data_type は、変数に割り当てるデータ型です。
  • expr は、パラメーターに割り当てるデフォルト値です。 DEFAULT 句を含めない場合、呼び出し元はパラメーターの値を提供する必要があります。

デフォルト値は、関数またはプロシージャが呼び出されるたびに評価されます。 例えば、SYSDATE を DATE 型のパラメーターに割り当てると、パラメーターには、プロシージャーまたは関数が作成された時刻ではなく、呼び出した現在の時刻が設定されます。

次の簡単なプロシージャでは、代入演算子を使用して、SYSDATE をデフォルト値として hiredate パラメーターに設定する方法を示します。

CREATE OR REPLACE PROCEDURE hire_emp (
    p_empno         NUMBER,
    p_ename         VARCHAR2,
    p_hiredate      DATE := SYSDATE
)
IS
BEGIN
    INSERT INTO emp(empno, ename, hiredate)
                   VALUES(p_empno, p_ename, p_hiredate);

    DBMS_OUTPUT.PUT_LINE('Hired!') ;
END hire_emp;

パラメーター宣言にデフォルト値が含まれている場合は、プロシージャを呼び出すときに、実際のパラメーターリストからパラメーターを省略できます。 例に挙げたプロシージャ (hire_emp) を呼び出すには、従業員番号 (p_empno) と従業員名 (p_empno) の 2 つの引数を含める必要があります。 3 番目のパラメーター (p_hiredate) の値は、デフォルト値である SYSDATE が設定されます。

hire_emp (7575, Clark)

プロシージャを呼び出すときに実際のパラメーター値を含めると、デフォルト値よりもその値が優先されます。

hire_emp (7575, Clark, 15-FEB-2010)

SYSDATE の現在値に関係なく、入社日が 2010 年 2 月 15 日の新しい従業員を追加します。

DEFAULT キーワードを代入演算子に置き換えても、同じ手順を記述できます。

CREATE OR REPLACE PROCEDURE hire_emp (
    p_empno         NUMBER,
    p_ename         VARCHAR2,
    p_hiredate      DATE DEFAULT SYSDATE
)
IS
BEGIN
    INSERT INTO emp(empno, ename, hiredate)
                   VALUES(p_empno, p_ename, p_hiredate);

    DBMS_OUTPUT.PUT_LINE('Hired!') ;
END hire_emp;