oracle过程中的默认参数

时间:2015-08-17 14:50:35

标签: oracle plsql

我创建了一个包xyz,如下所示: -

create or replace package xyz
is 

procedure abc( v_frst_param in VARCHAR2 default 'Y')
IS 

BEGIN

dbms_output.put_line(v_frst_param);
-- CALLING another function

update_table(p_frst_parm =>v_frst_param,
p_second_param =>'2');


END;

在dbms_output.put_line中,当我在调用abc过程时没有传递任何值时,输出为空。 如果我已经通过默认值并且我没有通过任何参数,那么该值在输出

中不应为Y.

2 个答案:

答案 0 :(得分:2)

首先,我认为软件包无效,你试图在软件包规范中添加函数体。然而,整个想法是好的,它应该工作,如果做得好,例如,创建一个包:

create or replace package xyz is

  procedure abc(v_frst_param in varchar2 default 'Y');

  procedure abc(v_frst_param in varchar2 default 'Y', v_second_param in varchar2);

end xyz;

包装体:

create or replace package body xyz is

procedure abc(v_frst_param in varchar2 default 'Y') is
  begin  
    dbms_output.put_line(v_frst_param);  
  end;

procedure abc(v_frst_param in varchar2 default 'Y', v_second_param in varchar2) is
  begin  
    dbms_output.put_line(v_frst_param || ' / ' || v_second_param);  
  end;

end xyz;

然后你可能想要调用你的程序:

begin
  xyz.abc;
  xyz.abc(); -- This is the same thing as above
  xyz.abc(v_second_param => 'Maybe');
end;

请注意如果您将v_first_parameter的参数作为参数发送给该程序,它将使用您发送的值而不是默认值。

答案 1 :(得分:1)

试试这个

主要取决于您如何调用您的程序 - ABC();ABC;ABC(NULL);ABC('');以及宣布parameters的方式。

  Create or replace procedure ABC(v_frst_param IN VARCHAR2 Default 'Y')
    AS
    OUT_v_frst_param  VARCHAR2(100);
    BEGIN
    OUT_v_frst_param  := v_frst_param ;
    dbms_output.put_line('The PROCEDURE OUTPUT is :  ' || OUT_v_frst_param );
    END;

--Procedure created.

BEGIN
ABC(); --calling procedure
END;

The PROCEDURE OUTPUT is :  Y    
Statement processed.

现在,如果你打电话给你的程序:

BEGIN
ABC; --calling procedure
END;

The PROCEDURE OUTPUT is :  Y
Statement processed.

--passing `NULL`    
BEGIN
ABC(NULL);
END;

The PROCEDURE OUTPUT is :          
Statement processed.

-- Passing  again ''   
BEGIN
ABC('');
END;

The PROCEDURE OUTPUT is :      
Statement processed.

--passing text  
BEGIN
ABC('hello world');
END;

The PROCEDURE OUTPUT is :  hello world    
Statement processed.