我有一个用 Oracle 9i(版本 9.2.0.4.0)编写的简单函数来模拟内联 IF。对于那些感兴趣的人,这是代码:
create or replace
FUNCTION IIF
(testExpression NUMBER,
trueResult NUMBER,
falseResult NUMBER)
RETURN NUMBER
AS
BEGIN
/*
A simple in-line IF function for use with SQL queries. If the test
expression evaluates to any non-zero value, it is considered to be
true, and the trueResult is returned. Otherwise, falseResult is
returned.
*/
IF (testExpression is null) or (testExpression = 0) THEN
return falseResult;
ELSE
return trueResult;
END IF;
END IIF;
这不是火箭科学。现在,这里有个大谜团:如果我执行以下 SQL 语句,一切都很好,并且完全按照我的预期工作:
SELECT IIF(1, 'true', 'false') FROM DUAL;
SELECT IIF(0, 'false', 'true') FROM DUAL;
但是,以下内容会从 Oracle 生成一个非常奇怪的错误:
SELECT IIF((0 = 1), 'false', 'true') FROM DUAL;
该错误如下:
ORA-00907: missing right parenthesis.
显然,事实并非如此。会有人碰巧对这种奇怪的事情有一个解释吗?
目前需要大量的自我控制来克制自己不要将 Oracle 服务器扔出窗外。甲骨文似乎充斥着这些无聊的东西。
编辑:我必须使用某种魔术语法在选择语句中使用相等运算符吗?