介绍
一个荒谬的小问题,但谷歌对特殊字符反应很糟糕,给出了主题“大于或等于”>= 的变体,但在这里我们有某种过渡,我不明白它的含义(我是试图找出别人的代码)。
本质
有一个函数调用:
if not mypkg.myfunc (
param_1 => PARAM_1,
param_2 => PARAM_2) then
...
end if;
那么问题来了,在输入参数的地方,参数名称只是大小写不同的地方,这是一个什么样的语素呢?
介绍
一个荒谬的小问题,但谷歌对特殊字符反应很糟糕,给出了主题“大于或等于”>= 的变体,但在这里我们有某种过渡,我不明白它的含义(我是试图找出别人的代码)。
本质
有一个函数调用:
if not mypkg.myfunc (
param_1 => PARAM_1,
param_2 => PARAM_2) then
...
end if;
那么问题来了,在输入参数的地方,参数名称只是大小写不同的地方,这是一个什么样的语素呢?
在
Oracle PL\SQL调用过程和函数时,可以显式指定将哪个值传递给哪个参数。它给了什么?
在子程序调用中设置参数的方式有以下三种:
位置符号- 实际参数的设置顺序与它们在声明期间声明的顺序相同。
命名符号- 使用以下语法以任意顺序给出实际参数:
formal => actual混合表示法- 首先使用位置表示法设置参数,然后将命名表示法用于其余参数。
示例问题中大小写的差异没有任何作用,在符号之前
=>是形式参数(正式),在实际参数之后(实际)。他们的名字可能完全相同。命名符号比位置符号和混合符号有许多优点:
更好的代码可读性。
指定参数的顺序并不重要,也不能错。
只有在声明中添加了新的强制形式参数时,才应更改子例程调用。
允许您在未按顺序指定实际参数时避免难以诊断的错误,尤其是当它们是文字时。
建议在编写新代码或重构旧代码时调用子例程,尤其是那些由其他人维护的代码。
所以你需要:
所以有可能:
这是不可能的:
如果有额外的 问题看到了。文档。
除了 Viktorov 在他的回答中所说的之外,这还用于将参数传递给带有可选参数的函数或过程。例如,我们有一个带有三个参数的过程:
它可以称为
然后在程序中
param2又param3会有默认值。如果您需要param2使用默认值并param3传递一些值,那么执行此操作的唯一方法是: