パラメーターが関数またはプロシージャに渡されるとき、位置指定または名前付きパラメーター表記を使用できます。 位置指定表記を使用してパラメーターを指定する場合は、宣言された順序でパラメーターをリストする必要があります。 名前付き表記でパラメーターを指定する場合、パラメーターの順序は重要ではありません。

名前付き表記を使用してパラメーターを指定するには、各パラメーターについて、パラメーター名、矢印 (=>)、およびパラメーター値の順で並べます。 名前付き表記の方が冗長ですが、コードが読みやすく、保守しやすくなります。

次の例では、位置指定および名前付きパラメーター表記の使用方法を示します。

CREATE OR REPLACE PROCEDURE emp_info (
    p_deptno        IN     NUMBER,
    p_empno         IN OUT NUMBER,
    p_ename         IN OUT VARCHAR2,
)
IS
BEGIN
    dbms_output.put_line('Department Number =' || p_deptno);
    dbms_output.put_line('Employee Number =' || p_empno);
    dbms_output.put_line('Employee Name =' || p_ename;
END;

位置指定表記を使用してプロシージャを呼び出すには、次のパラメーターを渡します。

emp_info(30, 7455, 'Clark');

名前付き表記を使用してプロシージャを呼び出すには、次のパラメーターを渡します。

emp_info(p_ename =>'Clark', p_empno=>7455, p_deptno=>30);

名前付き表記を使用すると、パラメーターリストが変更された場合、パラメーターが並べ替えられた場合、または新しいオプションのパラメーターが追加された場合に、プロシージャのパラメーターリストを再配置する必要性を減らすことができます。

引数にデフォルト値があり、その引数が末尾の引数でない場合は、名前付き表記を使用してプロシージャまたは関数を呼び出す必要があります。 次の例は、2 つの先行するデフォルト引数を持つプロシージャを示しています。

CREATE OR REPLACE PROCEDURE check_balance (
    p_customerID  IN NUMBER DEFAULT NULL,
    p_balance     IN NUMBER DEFAULT NULL,
    p_amount      IN NUMBER
)
IS
DECLARE
    balance NUMBER;
BEGIN
   IF (p_balance IS NULL AND p_customerID IS NULL) THEN
      RAISE_APPLICATION_ERROR
          (-20010, 'Must provide balance or customer');
   ELSEIF (p_balance IS NOT NULL AND p_customerID IS NOT NULL) THEN
      RAISE_APPLICATION_ERROR
          (-20020,'Must provide balance or customer, not both');
   ELSEIF (p_balance IS NULL) THEN
      balance := getCustomerBalance(p_customerID);
   ELSE
      balance := p_balance;
   END IF;

   IF (amount > balance) THEN
      RAISE_APPLICATION_ERROR
        (-20030, 'Balance insufficient');
   END IF;
END;

名前付き表記を使用して、末尾以外の引数値 を省略できます (このプロシージャを呼び出すとき)。 位置指定表記を使用する場合、末尾の引数のみがデフォルトで許可されます。 このプロシージャは、次の引数で呼び出すことができます。

check_balance(p_customerID => 10, p_amount = 500.00)

check_balance(p_balance => 1000.00, p_amount = 500.00)

位置指定と名前付きの表記を組み合わせて (混合表記)、パラメーターを指定できます。 次に、混合パラメーター表記の使用方法を示す簡単な例を示します。

CREATE OR REPLACE PROCEDURE emp_info (
    p_deptno        IN     NUMBER,
    p_empno         IN OUT NUMBER,
    p_ename         IN OUT VARCHAR2,
)
IS
BEGIN
    dbms_output.put_line('Department Number =' || p_deptno);
    dbms_output.put_line('Employee Number =' || p_empno);
    dbms_output.put_line('Employee Name =' || p_ename);
END;

混合表記を使用してプロシージャを呼び出すことができます。

emp_info(30, p_ename =>'Clark', p_empno=>7455);

混合表記を使用する場合は、名前付き引数を位置指定引数の前に置くことはできません。