常规函数中的 Oracle 命名参数
Oracle named parameters in regular functions
您能否在常规 oracle 函数中使用命名参数,例如 REGEXP_REPLACE?我喜欢命名参数表示法,并且总是用它来调用自定义的 PL/SQL 代码段,但以下内容似乎不起作用:
select regexp_replace( string => 'TechOnTheNet'
, pattern => 'a|e|i|o|u'
, replacement_string => 'Z'
, start_position => 1
, nth_appearance => 2
, match_parameter => 'i') from dual;
不适用于从 SQL 调用的内置函数;但你可以从 PL/SQL 赋值(和正确的形式参数名称):
declare
x varchar2(30);
begin
x := regexp_replace( srcstr => 'TechOnTheNet'
, pattern => 'a|e|i|o|u'
, replacestr => 'Z'
, position => 1
, occurrence => 2
, modifier => 'i');
end;
/
TechZnTheNet
PL/SQL procedure successfully completed.
即使在那里你也不能直接select函数结果。
有一个解决方法,但有点混乱。 PL/SQL 赋值使用函数的标准包版本,因此如果您使用的函数可从 PL/SQL 获得,您可以改为调用它:
select sys.standard.regexp_replace( srcstr => 'TechOnTheNet'
, pattern => 'a|e|i|o|u'
, replacestr => 'Z'
, position => 1
, occurrence => 2
, modifier => 'i') from dual;
SYS.STANDARD.REGEXP_REPLACE(SRCSTR=>'TECHONTHENET',PATTERN=>'A|E|I|O|U',REPLACES
--------------------------------------------------------------------------------
TechZnTheNet
除了更长之外,您可能会发现两个版本之间的性能不同 - 我不知道假设它们最终实现相同是否安全。
您可以通过如下简单查询查看可用函数:
select object_name, position, argument_name, in_out, data_type
from all_arguments
where owner = 'SYS' and package_name = 'STANDARD'
order by object_name, overload, position;
For regexp_replace
显示可用于不同参数数据类型的函数的三个版本。 (位置 0 的未命名参数是函数 return 类型)。
您能否在常规 oracle 函数中使用命名参数,例如 REGEXP_REPLACE?我喜欢命名参数表示法,并且总是用它来调用自定义的 PL/SQL 代码段,但以下内容似乎不起作用:
select regexp_replace( string => 'TechOnTheNet'
, pattern => 'a|e|i|o|u'
, replacement_string => 'Z'
, start_position => 1
, nth_appearance => 2
, match_parameter => 'i') from dual;
不适用于从 SQL 调用的内置函数;但你可以从 PL/SQL 赋值(和正确的形式参数名称):
declare
x varchar2(30);
begin
x := regexp_replace( srcstr => 'TechOnTheNet'
, pattern => 'a|e|i|o|u'
, replacestr => 'Z'
, position => 1
, occurrence => 2
, modifier => 'i');
end;
/
TechZnTheNet
PL/SQL procedure successfully completed.
即使在那里你也不能直接select函数结果。
有一个解决方法,但有点混乱。 PL/SQL 赋值使用函数的标准包版本,因此如果您使用的函数可从 PL/SQL 获得,您可以改为调用它:
select sys.standard.regexp_replace( srcstr => 'TechOnTheNet'
, pattern => 'a|e|i|o|u'
, replacestr => 'Z'
, position => 1
, occurrence => 2
, modifier => 'i') from dual;
SYS.STANDARD.REGEXP_REPLACE(SRCSTR=>'TECHONTHENET',PATTERN=>'A|E|I|O|U',REPLACES
--------------------------------------------------------------------------------
TechZnTheNet
除了更长之外,您可能会发现两个版本之间的性能不同 - 我不知道假设它们最终实现相同是否安全。
您可以通过如下简单查询查看可用函数:
select object_name, position, argument_name, in_out, data_type
from all_arguments
where owner = 'SYS' and package_name = 'STANDARD'
order by object_name, overload, position;
For regexp_replace
显示可用于不同参数数据类型的函数的三个版本。 (位置 0 的未命名参数是函数 return 类型)。