最近、次のように定義されたプロシージャを作成しました。
create or replace
PACKAGE
pkg_dml_legal_transactions
AS
PROCEDURE spm_update_court_cost(
p_court_state IN legal_court_cost.state%TYPE,
p_tran_code IN legal_court_cost.transaction_code%TYPE,
p_legal_court IN legal_court_cost.court%TYPE default null,
p_end_date IN legal_court_cost.end_date%TYPE,
p_cost_min IN legal_court_cost.cost_range_min%TYPE,
p_cost_max IN legal_court_cost.cost_range_max%TYPE,
p_bal_min IN legal_court_cost.bal_range_min%TYPE DEFAULT NULL,
p_bal_max IN legal_court_cost.bal_range_max%TYPE DEFAULT NULL);
end pkg_dml_legal_transactions;
プロシージャをexecute
しようとすると、次のエラーが表示されます。
PLS-00306: wrong number or types of arguments in call to 'SPM_UPDATE_COURT_COST'
これが私の実行文は次のようになります。
execute pkg_dml_legal_transactions.spm_update_court_cost('NJ',1,sysdate,1000,40000);
これでエラーの意味を理解できましたが、パラメーターのデフォルトがnullの場合はスキップできましたが、どうやらそうではありませんでした。これを回避する方法はありますか?
PL/SQLでは、名前付きパラメータ表記または位置表記のいずれかを使用してプロシージャをコールできます。一部のパラメーターをスキップする場合は、名前付きパラメーター表記を使用する必要があります
execute pkg_dml_legal_transactions.spm_update_court_cost( p_court_state => 'NJ',
p_tran_code => 1,
p_end_date => sysdate,
p_cost_min => 1000,
p_cost_max => 40000 );
一般に、プロシージャを設計するときは、呼び出し元も位置表記を使用できるように、すべてのオプションパラメータを最後に配置します。
最初の省略されたパラメータまでの混合アプローチ、位置表記法、残りの表記法を使用できます。
declare
procedure do_something(p_foo IN NUMBER
,p_bar IN VARCHAR2 DEFAULT NULL
,p_baz IN VARCHAR2) IS
begin
null;
end;
begin
do_something(12, p_baz => 'abc');
end;
しかし、私はジャスティンが提案したものを選びます。