use*_*778 10 oracle plsql procedure
我最近创建了一个定义如下的过程:
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;
Run Code Online (Sandbox Code Playgroud)
当我尝试execute该过程时,我收到一个错误,指出:
PLS-00306: wrong number or types of arguments in call to 'SPM_UPDATE_COURT_COST'
Run Code Online (Sandbox Code Playgroud)
这是我的execute语句的样子:
execute pkg_dml_legal_transactions.spm_update_court_cost('NJ',1,sysdate,1000,40000);
Run Code Online (Sandbox Code Playgroud)
现在我明白了错误意味着什么,但我想如果参数默认为null然后我可以跳过它们,但显然不是.有没有解决的办法?
Jus*_*ave 38
在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 );
Run Code Online (Sandbox Code Playgroud)
通常,在设计过程时,您可以将所有可选参数放在最后,以便调用者也可以使用位置表示法.
您可以使用混合方法,位置表示法直到第一个省略参数,其余为命名表示法.
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;
Run Code Online (Sandbox Code Playgroud)
但我会选择贾斯汀提出的建议.
| 归档时间: |
|
| 查看次数: |
45570 次 |
| 最近记录: |