gpt4 book ai didi

sql - 常规函数中的 Oracle 命名参数

转载 作者:行者123 更新时间:2023-12-01 10:37:05 28 4
gpt4 key购买 nike

您可以在常规 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.

即使在那里,您也无法直接选择函数结果。

有一个解决方法,但它有点困惑。 PL/SQL 赋值使用函数的 STANDARD 包版本,因此如果您使用的是 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;

对于 regexp_replace,它显示了可用于不同参数数据类型的函数的三个版本。 (位置 0 的未命名参数是函数返回类型)。

关于sql - 常规函数中的 Oracle 命名参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33387348/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com