使用可选参数创建过程的方法?

Posted

技术标签:

【中文标题】使用可选参数创建过程的方法?【英文标题】:Ways to create a procedure with optional parameters? 【发布时间】:2016-02-01 06:11:36 【问题描述】:

是否可以创建带有可选参数的过程? 例如,创建一个将所有参数相加的过程。

add(n1, n2, .... nn)

另一个过程,例如我有 11 个参数,它从 1 加到 10,最后一个参数可以做其他事情。 通过谷歌搜索,您似乎可以使用数组来做到这一点,但我得到的大部分结果都是关于另一种编程语言,而不是 plsql。如果将理论应用于 plsql 我想我想使用 varray 或嵌套表?

【问题讨论】:

在 PL/SQL 中,任何函数或过程的参数数量必须在编译时固定,以允许可变数量的参数使用数组类型。 【参考方案1】:

你需要用默认值声明参数:

procedure add (n1 number, 
               n2 number default 0,
               ...
               nn number default 99) is ...

使用此程序:

begin
  add(1);
  add(5, 6, 7, ..., 111);
  add(n1 => 111, n5 => 345, nn => 17);
end;

在最后一种情况下,如您所见,您可以为 3 个参数(n1n5nn)传递值,其他参数将使用默认值。

【讨论】:

您好,德米特里,感谢您的回复。这意味着我必须键入所有参数来创建带有可选参数的过程?有没有其他方法可以不用输入所有参数,或者这是唯一的方法?? @nicklowkc 没有其他办法。据我所知,在所有其他编程语言中也是如此。如果您需要 11 个参数 - 您必须在过程声明中编写 11 个参数。 在所有其他编程语言中也是如此” - 并非如此。其他编程语言具有“可变参数”,您可以在其中定义具有可变数量参数的函数(或过程),然后检查函数内的实际数量。但是PL/SQL不支持这个 @a_horse_with_no_name 谢谢,我以前从未见过这样的语言。 可变参数只是数组,只是它们的语法更易于使用,无需声明/初始化数组对象【参考方案2】:

您可以通过 DEFAULT 运算符或 '=' 来执行此操作

PROCEDURE ADD(NUMBER n1, NUMBER n2, NUMBER n3 DEFAULT 0)....

http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/fundamentals.htm#CHDFADII

如果您想在调用中不使用显式参数命名的情况下使用它,则必须将可选参数放在过程签名列表的末尾。通过调用中的显式参数命名,它们可以放置在任何地方

【讨论】:

以上是关于使用可选参数创建过程的方法?的主要内容,如果未能解决你的问题,请参考以下文章

Dart语法之可选参数

如何创建一个带有可选辅助 View 参数的 SwiftUI 视图?

如何使用可选参数创建端点? (节点、快递、MongoDB)

如何在 VBA 过程中使用可选数组参数?

SQL Server 存储过程中的可选参数?

如何在存储过程中设置日期时间可选参数?