使用可选参数创建过程的方法?
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 个参数(n1
、n5
、nn
)传递值,其他参数将使用默认值。
【讨论】:
您好,德米特里,感谢您的回复。这意味着我必须键入所有参数来创建带有可选参数的过程?有没有其他方法可以不用输入所有参数,或者这是唯一的方法?? @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
如果您想在调用中不使用显式参数命名的情况下使用它,则必须将可选参数放在过程签名列表的末尾。通过调用中的显式参数命名,它们可以放置在任何地方
【讨论】:
以上是关于使用可选参数创建过程的方法?的主要内容,如果未能解决你的问题,请参考以下文章