gpt4 book ai didi

oracle - 我可以编写一个行为类似于 REGEXP_LIKE 的函数,即其结果类型表现为 bool 值吗?

转载 作者:行者123 更新时间:2023-12-02 03:15:07 25 4
gpt4 key购买 nike

在 Oracle 中,通常应该返回 true/false 的 SQL 函数返回 1/0,因为 BOOLEAN 数据类型仅存在于 PL/SQL block 中。

例如对于 Oracle Text,您一定不要忘记 SELECT * FROM bartbl WHERE CONTAINS(foocol, 'sometext') > 0< 中的 > 0/。否则你会得到 ORA-00920 无效的关系运算符。

但是,似乎 REGEXP_LIKE 的行为就像一个真正的 bool 值:您可以执行 SELECT * FROM bartbl WHERE REGEXP_LIKE(foocol, 'sometext') 并且它有效。

所以我想知道为什么会这样,我是否有可能编写这样的函数?

最佳答案

曾几何时,ANSI SQL 中没有 bool 值要求(不确定最新标准中是否存在该要求?),而 Oracle 有时倾向于做自己的事情;)但是,我个人看不到这个问题使用 Y/N 或 1/0。

无论如何,REGEXP_LIKE 实际上是一种过滤器(可以减少返回的行数),与典型的函数(它将为其处理的每一行返回一个值(或空值))不同。但好消息是,如果你真的想模仿过滤器功能,你可以将 REGEXP_LIKE 与你自己的函数一起使用。例如:

create or replace function is_big_number(i_num in number)
return varchar2
as

begin
if (i_num >= 1000000) then
return 'Y';
end if;
return 'N';
end;

with x as (
select 50000 as num from dual
union all
select 1000000 as num from dual
union all
select 3 as num from dual
)
select num, is_big_number(num)
from x
-- this is a filter, not a typical "function"
where
regexp_like(is_big_number(num), 'Y');

输出:

NUM IS_BIG_NUMBER(NUM)
1000000 "Y"

希望对您有所帮助。

关于oracle - 我可以编写一个行为类似于 REGEXP_LIKE 的函数,即其结果类型表现为 bool 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37460819/

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