我有一個寫在Oracle 9i(版本9.2.0.4.0)中的簡單函數來模擬一個內聯IF。對於那些感興趣的,這裏是代碼:Oracle 9i:假設缺少右括號
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服務器拋出窗外。甲骨文似乎riff與這些類型的情緒。
編輯:有一種神奇的語法,我必須使用在select語句中使用相等運算符?
您不能在選擇語句的選擇列表中使用關係運算符。 – DCookie 2009-01-16 00:19:16