【问题标题】:Default parameter in oracle procedureoracle 过程中的默认参数
【发布时间】:2015-08-17 14:50:35
【问题描述】:

我创建了一个包 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

【问题讨论】:

  • 您是否将服务器输出设置为开启?
  • 是的,在输出中我得到了其他输出,但不是这个特定值
  • 是否也创建了相应的包体?
  • 您是如何执行此操作的?您同时拥有 Toad 和 plsqldeveloper 标签。你在使用一种特定的工具吗?您是通过键入的匿名块执行它还是使用工具的执行对话框?如果您使用该工具的执行对话框,请确保参数输入符合您的预期。 Toad 将遵循默认值并使用它,除非您覆盖它。

标签: oracle plsql


【解决方案1】:

首先,我认为这个包是无效的,你正试图在你的包规范中为你的函数添加一个主体。但是,整个想法很好,如果做得对,它应该可以工作,例如,创建一个包:

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 的参数发送到该过程,它将使用您发送的值,而不是默认值。

【讨论】:

  • 不,默认参数不需要最后声明。 abc(a in varchar2 default 'Y', b in varchar2) 是完全合法的,只要在调用时使用命名参数就可以正常工作。
  • 啊,确实,你是对的,谢谢,我会修正答案。我会支持您发表评论,但似乎无法这样做。
【解决方案2】:

试试这个

主要取决于您调用过程的方式 -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.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-27
    • 2017-03-06
    • 2016-11-04
    • 2022-11-16
    • 2012-08-06
    • 1970-01-01
    • 2018-12-11
    • 2011-12-07
    相关资源
    最近更新 更多