【问题标题】:Oracle stored procedure call with provided/default parameters使用提供/默认参数的 Oracle 存储过程调用
【发布时间】:2014-07-17 00:36:30
【问题描述】:

假设我有以下 Oracle 存储过程签名:

procedure my_procedure(parameter_1 varchar2, parameter_2 varchar2 default 'someDefaultValue', parameter_3 varchar2 default 'anotherDefaultValue', parameter_4 varchar2 default 'oneMoreDefaultValue')

如果我对此存储过程进行以下调用:

BEGIN my_procedure('one','two'); END;

我很确定,在存储过程中,parameter_1 将保存值one

但是,哪个变量将保存值two

谢谢!

【问题讨论】:

  • parameter_2 将保持值 2

标签: sql oracle stored-procedures plsql


【解决方案1】:

当您将第二个参数的值作为两个传递时,第二个参数会将其作为传递值。看下面的例子

CREATE OR REPLACE PROCEDURE my_procedure (
    parameter_1     VARCHAR2,
    parameter_2     VARCHAR2 DEFAULT 'someDefaultValue',
    parameter_3     VARCHAR2 DEFAULT 'anotherDefaultValue',
    parameter_4     VARCHAR2 DEFAULT 'oneMoreDefaultValue'
)
AS
BEGIN
    DBMS_OUTPUT.put_line ('first param ' || parameter_1);
    DBMS_OUTPUT.put_line ('second param ' || parameter_2);
    DBMS_OUTPUT.put_line ('third param ' || parameter_3);
    DBMS_OUTPUT.put_line ('fourth param ' || parameter_4);
END;

并执行程序

SET SERVEROUTPUT ON SIZE 30000;

BEGIN
    my_procedure ('one', 'two');
END;

和输出

first param one
second param two
third param anotherDefaultValue
fourth param oneMoreDefaultValue

【讨论】:

  • 啊!好的,所以参数填充了方法调用中提供的尽可能多的值,从左到右。现在我懂了。很酷的例子。谢谢!
  • 是的,如果值作为参数传递给方法,那么默认值将被忽略。
  • @JesúsZazueta:如果您不使用位置参数,而是使用命名参数,您还可以为任何参数提供值,而无需担心它们的顺序:my_procedure(parameter_1 => 'foo', parameter_4 => 'bar'); 将起作用也一样
猜你喜欢
  • 2013-10-03
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多