如何解决Oracle测试功能
Oracle中是否有一个内置功能以类似的方式工作?
CREATE OR REPLACE FUNCTION IFTrueValue(iValue NUMBER,sOper VARCHAR2,iTest NUMBER,iTrue NUMBER) RETURN NUMBER AS
bCond BOOLEAN;
BEGIN
EXECUTE IMMEDIATE 'SELECT CASE WHEN ' || iValue || sOper || iTest || ' THEN 1 ELSE 0 END FROM dual' INTO bCond;
RETURN CASE bCond
WHEN TRUE THEN iTrue
ELSE iValue
END;
END;
/
SELECT IFTrueValue(Mod(20,20),'=',20) FROM dual; -- return 20
SELECT IFTrueValue(Mod(25,20) FROM dual; -- return 5: Mod(25,20)
解决方法
您可以为此使用xmltable / xmlquery。
带有示例数据的完整示例:
with t(iValue,sOper,iTest,iTrue) as (
select Mod(20,20),'=',20 from dual union all
select Mod(25,'>',13 from dual
)
select
t.*,xmlcast(
xmlquery(
('if ($iValue '||sOper||' $iTest)
then $iTrue
else $iValue
')
passing
iValue as "iValue",iTest as "iTest",iTrue as "iTrue"
returning content
)
as number
)test_function
from
t
结果:
IVALUE SOPER ITEST ITRUE TEST_FUNCTION
---------- ----- ---------- ---------- -------------
0 = 0 20 20
5 = 0 20 5
5 > 0 13 13
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。