インラインIFをシミュレートするために、Oracle 9i(バージョン9.2.0.4.0)で記述された単純な関数があります。興味のある方のために、ここにコードがあります:
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サーバーを窓の外に投げ出さないようにするために、かなりの自制心が必要です。オラクルは、この種の無気力に満ちているようです。
編集:selectステートメントで等式演算子を使用するために使用しなければならないある種の魔法の構文はありますか?